cxGrid ve IBDataSet Filtreleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mudipasa
Üye
Mesajlar: 169
Kayıt: 13 Tem 2004 02:25
Konum: Batman

cxGrid ve IBDataSet Filtreleme

Mesaj gönderen mudipasa »

S.A. Sayın Delphiciler
Sonunda Firebirde geçtim (haydi hayırlı olsun) ve şimdiye kadar sorun yok. sağolsun arkadaşların verdiği örnekler ile bir çok şeyi hallettik ama bi sorunum var.
IBDataSet kullanıyorum. Normal IBTable de cxGrid in AutoDataSetFilter ini True yaptığımıza filtreyi hem yapıyordu hemde tableye uyguluyordu. Ama IBDataset için değil tableye hiç cxgrid de bile filtreleme yapmıyor. nasıl yapabiliriz ?
Kullanıcı avatarı
mudipasa
Üye
Mesajlar: 169
Kayıt: 13 Tem 2004 02:25
Konum: Batman

Mesaj gönderen mudipasa »

kusura vakmayın sayın delphici abilerim ama bu konu hakkında bir yardım etseniz çok makbule geçecek bayağı bir karıştırdım ama istediğim sonuca bir türlü varamadım...
adnansirca
Üye
Mesajlar: 135
Kayıt: 14 Kas 2005 12:24

Mesaj gönderen adnansirca »

:) mudipasa
ibdataset tarafında;
Ibdataset in selectsql,insertsql,modifysql ve deletesql leri var.
Bu özellikleri doğru kullandığınızdan emin misiniz.
http://www.delphidunyasi.net/index.php?topic=132.0 adresinde temel bilgiler verilmiş.
Size bir örnek vereyim:
Forma yeni bir cxGrid koyun.
DataSource ,KeyField kısımlarını cxDBTableView içinden oluşturun.
ardından IBDataSet içine aşağıdaki kodları yazın.

Kod: Tümünü seç

 
procedure TForm1.IBDataSet1AfterInsert(DataSet: TDataSet);
begin
   IBDataSet1.FieldByName('RecID').AsInteger := 999;
end;

procedure TForm1.IBDataSet1BeforePost(DataSet: TDataSet);
begin
   if IBDataSet1.FieldByName('Name').IsNull then  begin
       ShowMessage('Name Alanı bir değer içermelidir');
      ABORT;
  end;
end;
Gördüğünüz üzere ibdataset veya başka bir component arasında herhangi bir fark bulunmamaktadır. Bağlantıları düzgün yaptığınızda çalışır.
Sorun cxGrid in varsayılan özelliklerini değiştirmiş olmanızdan da kaynaklanıyor olabilir.
Bildiğiniz üzere Firebird Date,Time format 'MM/dd/yyyy' şeklindedir. Bu formatı değiştirmeniz gerekiyor olabilir. aramalarınızda tarih alanları ile ilgili filtreleme yapıyorsanız buna dikkat edin.
cxGrid tarafında;
cxGridDBTableViewX.DataController.GridMode := False olarak işaretli değilse filtreleme tam olarak gride yansımaz. Bu kısmı kontrol edin.
DetailinSQL değerini de False yapmanızı tavsiye ederim.

Mevcut cxGrid i formdan kaldırın ve yeni bir tane yerleştirip bu haliyle deneyin. Sorum devam ederse , tavsiyem ibdataset ve filtreleme ile ilgili arama yaptırın.

Filtrelemeye örnek :

Kod: Tümünü seç

var
  V: Variant;
begin
   V := VarArrayCreate([0, 1], varVariant);
   V[0] := 'B';
   V[1] := 'W';
   with cxgridZ.DataController.Filter do begin
     BeginUpdate;
     Root.Clear;
     Root.BoolOperatorKind := fboAnd;
     Root.AddItem(cxgridZAlan1, foEqual, null, 'Alan1 Filtre parametresi');
     Root.AddItem(cxgridAlan2, foEqual, 'S', 'Alan2 Filtre parametresi');
     Root.AddItem(cxgridAlan3, foNotInList, v, 'Alan3 Filtre parametresi');
     EndUpdate;
  end;
end;
Bu şekilde kodla filtreleme de yapılabilir.
Cevapla