1

Konu: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

malumunuz uzere yaptigimiz programlarda bir cok ozelligi barindirmak ama kullanici tercihine gore acik yada kapali tutariz , sorum su ;

fatura detay satirlarimi grid uzerinden girdiriyorum bazi kullanicilar ornegin iskonto1,iskonto2,iskonto3 gibi kolonlara ihtiyac duymuyorlar yada ozel kod , aciklama gibi alanlara ... sadece stok kodu girip miktar ve fiyat i girmek istiyorlar durum boyle oluncada soz konusu kolonlar o kullanici icin fazla oluyor

yapmak istedigim su ya istenilen kolon uzerinde gizle goster secenegi olsun ve bu secim kayitli bir sekilde bir yerde tutulsun bir sonraki acilista bu secim dogrultusunda gizli olarak gelsin

yada kolon adlari listelenip bir defada gizlenmek istenen kolonlar secilsin ve bu secim kayitli kalsin

aklımda bazi cozumler var ama bunu tecrube etmis arkadaslar dan fikir veya kod ornegi gelirse sevinirim

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

2

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

ben benzer konuda genel bir parametre ayarı yaptım. tüm kullanıcılar için geçerli ayar. ama kullanıcılar kendileri için kullanıcı bazında olmasının daha iyi olacağını söylemişlerdi. bir kes daha yapmam gerekse kullanıcı bazında yapardım

3

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

zaten kullanici bazli olmali yada client pc ye gore

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

4

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

ben program içerisinde kullanıcı ve şifre soruyorum.
her kullanıcının id numarasının referans olduğu bir parametre dosyasını .txt olarak SYS(5)+SYS(2003) altında saklıyorum.
örnek idsi 4 olan parametre_4.txt dosyasının içeriği
ÜTÜ BÖLÜMÜ01 05                                       
oda       02 06 03 07 04 08                           
masa      09 13 10 14 11 15 12 16                     
havlu     17 21 18 22 19 23 20 24                     
ünif      25 29 26 30 27 31 28 32     

Form.Init (Formda ilgili kontroller .Visible=.f.)
FOR Xi= 1 TO 5
Form Captionu ile LEFT(MLINE(FILETOSTR(parametre_4.txt),Xi) karşılaştırıyor.

Bulursa: örneğin oda captionlu formda
Yi=11
DO WHIL VAL(SUBS(FILETOSTR(parametre_4.txt),Yi,3))>0
ThisForm.Objects[VAL(SUBS(FILETOSTR(parametre_4.txt),Yi,3))].Visible=.t. && 02, 06 ...
Yi=Yi+3
ENDD   && .....diye gidiyor.

Form.Destroy
Xkaydet=LEFT(ThisForm.Caption,10)
FOR Xi=1 TO Form.ControlCount
  IF Form.Controls[Xi].Visible
    Xkaydet=Xkaydet+STR(Xi,3,0)
  ENDI
ENDF
=STRTOFILE(Xkaydet,parametre_4.txt)  && _4 kullanıcı id  parametrik, ayrıca kod üretmedim.

AYNI şey grid.Columncount ve Columns[] özelliği ile yapılabilineceğini düşünüyorum.
umarım anlatabildim, (fikir vermek için cowboy kodları ürettim)  daha ötesi umarım faydalı olabildim....

VFP9 SP2

5

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

Soykan,
Cevap vermekten hep kacindim buna cunku kisa cevabi FoxyClasses olacakti, sen MSN'den soyledin diye yaziyorum:)

Grid propertylerini, o anki sort vs bilgilerini kullanici basina bir XML dosyasinda ya da registryde saklayip oradan tekrar kurabilirsin. Kodu oyle cok basit ve kisa degil (belki de ben kisa sekilde beceremedim).

6

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

soykanozcelik  bu konu ile ilgili kendi başıma gelen bir iki hususu sana aktarayım.Müşteri senin dediğin gibi herhangi bir bilgiyi o ekranda görmek istemiyorsa,ben şöyle yapıyorum.
Her modülün kendi içerisinde "sabit ve tanımlamalar" diye bir bölümü var.Mesala Kullanıcı İstakonto 3 görünmesin dediğinde sabit ve tanımlamalar bölümüde ,bir check box koyarak,Fatura ekranında istkonto3 ü gizle gibi bir bilgi koyuyorum.Bu bilgiyi Kullanıcı tablomda bir field açarak saklıyorum.Ön değer olarak hiç bir şeyi değiştirmiyorum.Kullanıcı özellikle sabit ve tanımlar menüsüne gidip oradaki check box ı işaretlerse, o kullanıcı,ilgili ekrana girdiğinde görmek istemediği bilgiyi gizliyorum..Bu şekilde herkesin ihtiyacına cevap verebilecek sistem oluşmuş oluyor..Çok fazla problem çıkmıyor..

En büyük sermaye nakit,nakit sermaye vakittir...

7

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

Ben daha basit olarak soyle halledebilmeyi dusundum grid te sagmouse tıklayinca kolon gizle-goster diye bir menu ciksin tıklayinca asagidaki goruntudeki gibi form uzerinde bir grid ve varsayilan tum kolonlar visible = .t. sekilnde kullanici gormek istemedigi kolon icin checkbox tan isareti kaldirdiginda ve ayarlari kaydet tıklatinca bu bilgiler bir XML,free dbf da regisrtyde saklanabilir ve form yuklenirken okunarak runtime da gizlenmesi saglanabilir  ayrica bu ayarlari tutan dosyada client tarafinda form ilk calistirildiginda form load ta iken default ayarlarla bir defada olusturulur ve kullanilmaya devam eder. bu sekilde ayarlar client bazli tutulmus olur kullanici haklari vs lerin tutuldugu kısımlarda fazla detay a girilmemis olur...


kolon adı    gizle_goster
stokkodu          .t.
stokAdı             .t.
ozelkod            .t.
aciklama           .t.
miktar               .t.
fiyat                 .t.
tutar                 .t.
kdv                  .t.
iskonto1           .t.
iskonto2           .t.
iskonto3           .t.
..
.

tablo yapisida

columnCaption C(20), GrdColumnName C(20),isVisible L seklinde olabilir

diye dusunuyorum sizce efektif bir cozummudur ?

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

8

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

güzel fikir,ama bunu böyle yaparsan,tüm gridlere istemesinler ?sora başına iş alırsın.Bu gridde varda şunda niye yok diye?

En büyük sermaye nakit,nakit sermaye vakittir...

9

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

neyzen yazdı:

güzel fikir,ama bunu böyle yaparsan,tüm gridlere istemesinler ?sora başına iş alırsın.Bu gridde varda şunda niye yok diye?


musteri memnuniyeti smile gerekirse yaparim ne yapayim ...

tablo yapisinida yazarken bir kac ek daha yapilabilir diye dusundum

FormName C(20),GridName C(20),columnCaption C(20), GrdColumnName C(20),isVisible L seklinde olabilir

bunu yazarken aklima su soru geldi

gridin adini , columnnamelerini , header captionlarini bir dongu icinde nasil aliriz ? bu sayede formname gridname  vs bilgilerini de katarak tabloyu burdan gelecek bilgiler dogrultusunda olusturabiliriz ?

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

10

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

ayıklayıp temizlemeden bende bu işi yapan kodu gönderiyorum . Belki işine yarar. Bu arada ben xml de değil sqlde tutuyorum. faydası :kullanıcı başka bir bilgisayarada geçse ayarları aynı geliyor
kayıt:

Visual Fox Pro
If This.saklanacak AND USED("sakla")

    IF RECCOUNT("SAKLA")=0
        SELECT SAKLA
        REQUERY()
    ENDIF
    ESKIDOSYA=ALIAS()
    Select sakla
    Go Top
    For Each LoColumn In This.Columns
        LcFormAdi = Thisform.Name
        LcGridAdi = SYS(1272,this)
        LcGridAdi = SUBSTR(LcGridAdi ,ATC(".",LcGridAdi )+1,LEN(LcGridAdi )-ATC(".",LcGridAdi )) && baştaki formadini at
        LcKolonadi = LoColumn.Name
        If Empty(LoColumn.header1.Tag)
            LcBaslik = Alltrim(LoColumn.header1.Caption)
        Else
            sahaadimiz = "kodlar."+LoColumn.header1.Tag
            LcBaslik = Evaluate(sahaadimiz)
        Endif
        LnSiraNo = LoColumn.ColumnOrder
        LnYukseklik = this.RowHeight
        LnEn = LoColumn.Width
        LnOlacak = NVL(Val(LoColumn.Comment),0)
        LcKaynak = LoColumn.Tag
        Select sakla
        Go Top
        Locate For formadi = LcFormAdi .And. gridadi = LcGridAdi .And. kolonadi = LcKolonadi
        If Found()
            IF sirano<>LnSiraNo
                Replace SiraNo With LnSiraNo
            ENDIF
            IF yukseklik<>LnYukseklik
                replace Yukseklik With LnYukseklik
            ENDIF
            IF olacak <> lnolacak
                replace olacak WITH lnolacak
            ENDIF
            IF kaynak <> LcKaynak
                replace kaynak WITH LcKaynak
            endif
            If LoColumn.visible=.t.
                IF En <> LnEn
                    Replace En With LnEn
                endif
            Endif
        ELSE
            IF locolumn.visible=.t.
                Lngoster=1
            ELSE
                Lngoster=0
            endif
            Insert Into sakla     (formadi,gridadi,kolonadi,baslik,asilbaslik,SiraNo,Yukseklik,En,goster,olacak,kaynak,kullanici,sirket);
                VALUES     (LcFormAdi,LcGridAdi,LcKolonadi,lcbaslik,lcbaslik,LnSiraNo,LnYukseklik,LnEn,LnGoster,LnOlacak,LcKaynak,anaform.kullanici,anaform.sirket)
        Endif
    ENDFOR
    SELECT sakla
    GO top
    IF !EMPTY(ESKIDOSYA)
        SELECT (ESKIDOSYA)
    ENDIF
Endif

Yükleme:

Visual Fox Pro
IF THIS.saklanacak AND USED("sakla")

    IF RECCOUNT("SAKLA")=0
        SELECT SAKLA
        REQUERY()
    ENDIF
 
    ESKIDOSYA=ALIAS()
    LcGridAdi = SYS(1272,THIS)
    LcGridAdi = SUBSTR(LcGridAdi ,ATC(".",LcGridAdi )+1,LEN(LcGridAdi )-ATC(".",LcGridAdi )) && baştaki formadini at
    KAYNAGIMIZ=THIS.RECORDSOURCE
 
    SELECT SAKLA
    GO TOP
    LOCATE FOR formadi = THISFORM.NAME .AND. gridadi = LcGridAdi
    IF !FOUND() && yeni kuurlum
        FOR EACH LoColumn IN THIS.COLUMNS
            IF LoColumn.COMMENT <> "1"
                LoColumn.VISIBLE = .F.
            ENDIF
        ENDFOR
        THIS.kaydet
        THIS.SETALL("fontsize",8,"Column")
        THIS.ROWHEIGHT = 15
    ELSE
        FOR EACH LoColumn IN THIS.COLUMNS
            SELECT SAKLA
            GO TOP
            LOCATE FOR formadi = THISFORM.NAME .AND. gridadi = LcGridAdi  .AND. kolonadi = LoColumn.NAME
            IF FOUND()
                IF !SAKLA.olacak = 1 .AND. SAKLA.goster = 0
                    LoColumn.VISIBLE = .F.
                    m.lcismi="thisform.arama"+LoColumn.NAME
                    IF TYPE(m.lcismi)="O"
                        m.lcismi="arama"+LoColumn.NAME
                        THISFORM.REMOVEOBJECT (m.lcismi)
                    ENDIF
                ELSE
                    LoColumn.VISIBLE = .T.
*                    LoColumn.Tag = Alltrim(Str(sakla.goster))
*            LoColumn.Comment = Alltrim(Str(sakla.goster))
*            LoColumn.header1.Caption = Alltrim(Baslik )
                    IF !EMPTY(LoColumn.header1.TAG)
                        sahaadimiz = "kodlar."+LoColumn.header1.TAG
                        LoColumn.header1.CAPTION = EVALUATE(sahaadimiz)
                    ENDIF
                    LoColumn.COLUMNORDER = SiraNo
                    THIS.ROWHEIGHT = Yukseklik
                    LoColumn.WIDTH = En
                    loCurrentControl = LoColumn.CURRENTCONTROL
 
                    IF LoColumn.BASECLASS = "Column"
                        SELECT (KAYNAGIMIZ)
                        LoColumn.CONTROLSOURCE = ALLTRIM(SAKLA.kaynak)
                        LoColumn.REFRESH
                        loCurrentControl = LoColumn.CURRENTCONTROL
*                        LoColumn.&loCurrentControl..readonly=.f. && Current Control
                        LoColumn.&loCurrentControl..REFRESH
                        SELECT SAKLA
                    ENDIF
 
                ENDIF
            ENDIF
        ENDFOR
    ENDIF
 
    IF !EMPTY(ESKIDOSYA)
        SELECT (ESKIDOSYA)
    ENDIF
ENDIF

11

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

tesekkur Cemal,
kodlari gozonunde bulundurarak bir seyler yapicam bakalim nasil bir sey cikacak ortaya smile

bu arada grid uzerinde sakla ve kaydet i tetikleyen nasil bir kodlama kullandin rclick menu vs

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

12

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

Her gridi kayıt etmiyorum. Bunun içinde saklanacak diye propertie var.
Init:

Visual Fox Pro
if this.saklanacak

   this.yukle
endif


Destroy:

Visual Fox Pro
if this.saklanacak

   this.Sakla
endif


Birde bazı columnlar varsayılan yani kaldırılamaz olması gerekiyor. Onlarında comment'ine 1 yazıyorum. Koddan anlamışsındır.

13

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

Evet , sende gecen alan adlari uzerinden deneme cursor olusturup ornek form uzerinde bilgilerin saklanmasini sagladim devamini sekillendirmek daha kolay olacak smile

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

14

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

Bu foxyclass nedir, ne işe yarar, ayrıntılı bilgi nasıl edinebilirim ?

15

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

http://www.foxyclasses.com/

16

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

Selam Soykan,
Ben de Cemal gibi SQL veya DBF'de tutuyorum. Bunun için bir class tasarladım ama kod o kadar kısa değil bir çok durum var. Ancak en azından insert veya replace yerine gather ve scatter'ın objeden bilgi almada ve objeye bilgi atama özelliğini kullanabilirsin.
Gather Name
Scatter Name

/o---------------------o\
     www.haser.com
\o---------------------o/

17

Re: Kullanıcı Tercihlerine göre grid kolonlarinin gizlenmesi

Yanıt içi teşekkür Tarkan,
gelen tavsiyeler ve ornek bazı kodlar doğrultusunda bende bir grid class hazirliyorum daha dogrusu ek method , property ler ile base grid class ima ilave yapiyorum ayarlari bende DBF te tutacagim ve UserID ye gore saklaniyor ayarlar ...

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg