cxGrid Master-Detail OnDetailExpandig Kullanımı (ÇÖZÜLDÜ)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

cxGrid Master-Detail OnDetailExpandig Kullanımı (ÇÖZÜLDÜ)

Mesaj gönderen vkamadan »

Merhaba değerli üyeler,
cxGrid 6.42 sürümünü kullanıyorum , master-detail görünümlü listeleme yapıyorum, ancak Detail verisinin bulunduğu tablo çok büyük olduğu için cxGrid in varsayılan olarak sunduğu yapı olan detail dataset in tamamen çekilmesi noktasında ciddi performans sorunları yaşıyorum. DataModeController içinde "DetailInSQLMode" adında bir özellik var kullanımı ile ilgili açıklayıcı bir örnek bulamadım, ayrıca View in olayları arasında DataControlMode olayları altında OnDetailExpanding adında bir olayda var buralarda birşeyler yapılabilir gibi, yapmak istediğim kullanıcı detail i görmek için master kaydın artı tuşuna tıkladığı anda ilgili detail için bağlı Query ime sorguyu yazmak ve sadece expand edilen master row a lazım olan detail kayıtları DB den çekmek.

iyi çalışmalar.
En son vkamadan tarafından 30 Haz 2016 03:06 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: cxGrid Master-Detail OnDetailExpandig Kullanımı

Mesaj gönderen freeman35 »

Sana tavsiyem hiç uğraşma :)
2 grid kullan en hızlı ve kolay çözüm. Diğer çözüm illaki master detail olacaksa, VirtualTreeView kullanabilirsin. Open source dur ve çok hızlıdır. devex de her query yi değiştirdiğinde dataset değişti diye tekrar okumaya gidiyor vs gibi saçma sapan (bana göre tabi :) ) atlayıp zıplayıp duruyor. Grid mode da kullanamıyorsun oda dengeli çalışmıyor. Detail dataset te, master daki tüm şartlara uygun, tüm kayıtlar olmak zorunda. Sende sadece açılan master a ait detail kayıtlar gelsin diye, detail dataset e master ın key sini sql e ekliyeyim istiyorsun, ama cx bir üsteki master ın detayını nerden okumaya da çalışıyor, işte ozaman çarşı karışıyor :D
Ben eğer çok fazla kayıt olacaksa, ve özellikle kayıt girilecekse, yani edit vs olacaksa iki grid kullanıp dataset leri bağlamayı tercih ederim. yok illaki tek grid olacaksa, ve edit işlemleri olmama şartı koyarsam, ozamanda sql i birleştirip, group kullandırıyorum, sonuçta son kullanıcı için master-detail de bir group :)
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: cxGrid Master-Detail OnDetailExpandig Kullanımı

Mesaj gönderen vkamadan »

Merhaba @freeman35 öncelikle cevabınız için teşekkür ederim.
Soruyu foruma yazdıktan sonra araştırmalara devam ettim ve tatmin edici sonuca ulaştım , sonucu yazmak için başlığa girince de mesajınızı gördüm :)
Evet cxGrid in doğası biraz kendine has bağladığınız datasetlere müdehale ediyor neyse ki bize de sorduğu olaylar varmış :)
2 seviyeli master-detail yapı kurmam gerekti gerçi seviyenin bir önemi yok ,
müşteri hesaplarını , altında poliçelerini , her poliçe altında da ödeme planını gösteriyorum ,

öncelikle cxGrdi master-detail yapıyı bildiğimiz gibi kuruyoruz yani tüm datasetler açık ve tüm data çekilmiş olacak gibi Viewler üzerinde bağlantıları kuruyoruz.
film bundan sonra başlıyor ;
ilk olarak detail dataset imizin SQL cümlesine parametre yada parametreleri ekleyerek son şeklini veriyoruz
benim ki ;

Kod: Tümünü seç

select hes_kod , tarih , police_no , sirket_adi,poli_id from police where hes_kod=:hes_kod
Detail View in DataModeController altında yer alan DetailInSQLMode = True yaparak açıyoruz ve Detail View in Olayları arasında DataModeController altında yer alan OnDetailFirst olayında konuyu yönetiyoruz ;

Kod: Tümünü seç

procedure TForm1.cxGrid1DBTableView2DataControllerDataModeControllerDetailFirst(
  Sender: TcxDBDataModeController; ADataSet: TDataSet;
  const AMasterDetailKeyFieldNames: string;
  const AMasterDetailKeyValues: Variant; var AReopened: Boolean);
begin
with (ADataSet as TMyQuery) do
  begin
    if ParamByName('hes_kod').Asstring = AMasterDetailKeyValues then
    begin
      First;
      Exit;
    end;
    DisableControls;
    try
      Active := False;
      ParamByName('hes_kod').Asstring := AMasterDetailKeyValues;
      Active := True;
    finally
      EnableControls;
    end;
    AReopened := True;
  end;
end;

ayrı bir grid kenara koyup detail dataseti ona da bağlayıp gerçekten sadece gereken kayıtların çekildiğinide gözlemledim.

iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: cxGrid Master-Detail OnDetailExpandig Kullanımı (ÇÖZÜLDÜ)

Mesaj gönderen freeman35 »

ilk fırsatta bende deniycem, saolasın. Master lar üzerinde gezindiğinde performans yada görünümler nasıl ? ve print denedin mi?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: cxGrid Master-Detail OnDetailExpandig Kullanımı (ÇÖZÜLDÜ)

Mesaj gönderen vkamadan »

@freeman35 , performansta normal tek level kullanımda olduğundan bir fark göremedim, 3 level yazdırma denedim ne görüyorsam aynen yazdırdım. tabi benim sürümde ExcelExport hiç bir detail i export etmiyor sadece ilk view i export ediyor bunu biliyordum önceden. her level i ayrı renklendirmek şart çünkü birbirne girmiş bir görüntü oluşuyor varsayılan sınırlar çok net belli olmuyor renklere mutlaka müdahale gerekiyor.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: cxGrid Master-Detail OnDetailExpandig Kullanımı (ÇÖZÜLDÜ)

Mesaj gönderen freeman35 »

Bende v15 de denedim, başarılı :) demekki baya düzeltmişler elemanlar. senin kod ile ufak fark

Kod: Tümünü seç

if ParamByName('hes_kod').Value = AMasterDetailKeyValues then
print export vs denemedim bende performası nasıl olacak, gene atlayıp zıplayacakmı diye merak ettim, basit bir deneme yaptım. Ama nedendir bilmem öyle yapmışlar, gridmode=True ise event çalışmıyor.
Bayramdan sonra nasipse fırsat bulursam biraz daha denerim, mesela 2 parametre olursa nasıl olur :) birden fazla field ile bağ kurabiliyorsunuz, field isimleri arasına ";" koymanız yeterli. Tabi hem master hemde field tarafına.
Saolasın.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

Re: cxGrid Master-Detail OnDetailExpandig Kullanımı (ÇÖZÜLDÜ)

Mesaj gönderen hi_selamlar »

Paylaşımlarınız için teşekkürler. :bravo:
Herkes cahildir, bazi konularda.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: cxGrid Master-Detail OnDetailExpandig Kullanımı (ÇÖZÜLDÜ)

Mesaj gönderen vkamadan »

@freeman35 önemli bir detayda şöyle ,
detail datasetin SQL inin içinde ki parametre isimleri, master ın keyfiled isimleriyle aynı olmak zorunda. buna müdahele ettirmiyor.
bende master key hes_kod , detail tablomdaki ilişkili alanımda hes_kod ama mesela alanın adı "hesapkodu" olsaydı parametrem mutlaka select..... where hesapkodu=:hes_kod şeklinde olmalıydı.
kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla