cxGrid - Öğrenme - Bilgi Edinme

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
destiny24
Üye
Mesajlar: 131
Kayıt: 22 Tem 2010 09:42

cxGrid - Öğrenme - Bilgi Edinme

Mesaj gönderen destiny24 »

Arkadaşlar Merhaba,

Delphi XE2 ile birlikte cxgrid lerde işlemlerimi yürütmeye başladım ancak daha önceden kullanmış olduğum dxgrid veya rzgrid'e pek benzemiyor.Araştırdığım kadarı ile dibi olmayan bir kuyu imiş cxgrid.

mesela daha önce grid ile birlikte seçtiğim satır bağlı olduğu queryininde aktif satırı olduğundan gride tıkladığımda query1.fieldbyname('ISIM').AsString ile istediğim sütuna çok rahat ulaşıyordum.
cxgrid'de işler nasıl ilerliyor.
dxgrid den cxgride geçen arkadaşlara özellikle çok kullanılan kodlar için yardımcı olacak tavsiyelerinizi rica ediyorum.

Teşekkürler...
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: cxGrid - Öğrenme - Bilgi Edinme

Mesaj gönderen Lost Soul »

GridinViewi.DataController şekline data nesnesine erişebilirsiniz. Tabii rowindex colindex gibi kavramlar da giriyor işin içine.

Örneğin aşağıdaki metod vListeSec isimli checkbox kontrollü sütunda (SEC isimli filedi simgeleyen column) tarama yapıp
check edilen kayıtların vListeID isimli kolondaki (ID alanını simgeleyen sütun) ID değerlerini diziye atarak döndürüyor.

Kod: Tümünü seç

var
  dc : TcxCustomDataController;
  i : Integer;
  v : Variant;
  b: Boolean;
begin
  SetLength(Result,0);
  dc := vListe.DataController; // vListe = gridin view'i ben ismini vListe koydum. her seferinde bu kadar uzun yazmamak için dc isimli bir değişkene datacontrollerini ekledim (with deyimi de kullanılabilirdi ama koda ger dönüşlerde sıkıntı oluyor)
  dc.BeginUpdate; // disablecontrols gibi bişey. Performans ve veri bütünlüğü için gerekli
  for i := 0 to dc.RecordCount - 1 do // while not eof gibi
  Begin
    v := dc.GetValue(i,vListeSec.Index); // birinci parametre kayıt numarası ikinci parametre almak istediğimiz sütunun index numarası dönüş değeri variant
    b := (VarIsNull(v)= False) and (v= True); //burası şart değil ama kontrol anlaşılır olsun diye.
    if b then
    Begin
      SetLength(Result,Succ(Length(Result)));
      Result[High(Result)] := dc.GetValue(i,vListeId.Index); // bu sefer ID alanın değerini alıyor.
    end;
  End;
  dc.EndUpdate;
Not:
gridde filtreleme olayı da mevcut biliyorsunuz eğer tm kayıtları değil de sadece filtreli kayıtları döndürmek istiyorsanız

Kod: Tümünü seç

for i := 0 to dc.RecordCount - 1 do 
yerine

Kod: Tümünü seç

for i := 0 to dc.FilteredRecordCount - 1 do 
ve

Kod: Tümünü seç

v := dc.GetValue(i,vListeSec.Index);
yerine

Kod: Tümünü seç

v := dc.GetFilterDataValue(i,vListeSec.Index);
kullanmanız gerekir.
destiny24
Üye
Mesajlar: 131
Kayıt: 22 Tem 2010 09:42

Re: cxGrid - Öğrenme - Bilgi Edinme

Mesaj gönderen destiny24 »

öncelikle bilgiler için çok teşekkür ederim de, her seferinde bu kadar uğdaşmak mı gerekli.? Eskisi gibi query i kullanıyor olmamız mümkün değil mi .?
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: cxGrid - Öğrenme - Bilgi Edinme

Mesaj gönderen Lost Soul »

Elbette ki filtreleme için query yada datasetin kendi filter özelliğini kullanabilirsiniz.
Burada query mi yoksa grid filter mi kullanacağız sorusunun cevabı sizin keyfinize veyahut kullanım yerine (local, network, web) kalmış bir durum.

yukarıdaki örnekte grid üzerinde vListeSec sütunu datasetten ayrı olarak eklenmiş bir kontrol alanı ve buna erişmek için böyle bir tarama yöntemi kullandım.
cxgridde seçili satıra ait değerleri almak istiyorsanız gene grid.DataController.GetValue deyimini (veyahut bunun ibi alternatif deyimleri) kullanmanız gerek. Zira cxgrid, alışılagelen gridler gibi seçili satır değiştiğinde datasetin aktif kayıt konumunu değiştirmez (performans arttırmak için ve aynı tabloya birden fazla view kullanılabildiği için) (bu işlemin yapılmasını sağlayan bir option var diye hatırlıyorum).
O nedenle dataset.FieldByName('xxx').Asxxx deyimi ile cxgridin viewinde seçili olan kaydı alamazsınız.

Böyle erişimler o kadar da komplex değil. Biraz inclendiğinde Yukarıdaki örnek ile while not eof deyimi arasında çok da fazla extra kod yazımı yok aslında.
destiny24
Üye
Mesajlar: 131
Kayıt: 22 Tem 2010 09:42

Re: cxGrid - Öğrenme - Bilgi Edinme

Mesaj gönderen destiny24 »

bununla ilgili aslında yapmak istediğim şey.ihtiyacım olan şey grid üzerindeki seçili satırdaki veriye query ile ulaşmaktı ancak böyle değilmiş.peki bununla ilgili option hatırlayabildiniz mi ben bulamadım çünkü. neyse dediğiniz gibi bunun ile yazmaya başlayınca alışırız ve kodlar alışageldik olur artık.


ayrıca işin içine rowindex ve columnindex giriyor ya ben columnindexi sağlıklı bulmadığım için column adı ile çağırmak istesem bunun için ne yapacağım veya gride tıklandığında editin içine herhangi bir sütunun değerini nasıl alacağım.?

Teşekkürler,
İyi Çalışmalar.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: cxGrid - Öğrenme - Bilgi Edinme

Mesaj gönderen Lost Soul »

Zaten orada kullandığınız index öyle normal griddeki sütun numarası değil (yani çoğunlukta öyle ama pratikte değişiyor kullanıcı müdahalesiyle)
yukarıdaki örnekte KolonAdi.Index şeklinde (vListeSec.Index) kullanmışım zaten. Yani yöntem sağlıklı :)
Kullanıcı avatarı
KOROGLUCW
Üye
Mesajlar: 36
Kayıt: 02 May 2013 09:10
İletişim:

Re: cxGrid - Öğrenme - Bilgi Edinme

Mesaj gönderen KOROGLUCW »

ini dosyasına tıkladığım bir alanı kayıt ettiriyorum variant tipi ile;
sonra tekrardan program açıldığında iniden dosyayı okutuyorum ama cxgrid inideki alanı seçili hale getirmem gerekiyor? ne yapmam gerekiyor ki?
Locate ? vs?
En iyi Sistem fişi çekilmiş Sistem'dir.
Cyber-Warrior.org/K@R@GLU
Cevapla