cxgrid'e çalışma anında filtre ekleme....

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

cxgrid'e çalışma anında filtre ekleme....

Mesaj gönderen fahrettin »

Arkadaşlar cxgride kod ile calisma anında nasıl filtre ekleyebilirim? Sadece belirli bir alanı kriterime uyan kayıtlar gorunsün istiyorum...

Kolay gelsin....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Şuna benzer bir kod işinizi görecektir:

Kod: Tümünü seç

procedure TMyMainDataEntranceForm.Button1Click(Sender: TObject);
var
  aItemList: TcxFilterCriteriaItemList;
begin
  cxGrid1DBBandedTableView1.DataController.Filter.BeginUpdate;
  try
    Screen.Cursor := crHourGlass;
    aItemList := cxGrid1DBBandedTableView1.DataController.Filter.Root.AddItemList(fboOr);
    aItemList.AddItem(cxGrid1DBBandedTableView1.Controller.FocusedItem, foEqual, 'A', 'A');
  finally
    cxGrid1DBBandedTableView1.DataController.Filter.EndUpdate;
    if not cxGrid1DBBandedTableView1.DataController.Filter.Active then cxGrid1DBBandedTableView1.DataController.Filter.Active := TRUE;
    if cxDBVerticalGrid1.Visible then cxDBVerticalGrid1.DataController.Filter := cxGrid1DBBandedTableView1.DataController.Filter;
    Screen.Cursor := crDefault;
  end;
end;
İyi çalışmalar.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Fahrettin abi tamda bunla uğraştım bugün :D
@Hakancan'ın söylediklerine ilaveten
Burdaki yazıya bakabilirsin. Bana yardımcı oldu
http://www.devexpress.com/Support/Knowl ... kbid=A1937

Ben şöyle bir sistem kurdum.
Kullanıcının filtreleme yapmak istediği alanlar için giriş yapılacak metin kutularına designtime da taglarına sırasıyla numara verdim.

Kod: Tümünü seç

edtAd.tag :=  1;
edtSoyad.tag := 2;
...
Sonra bu alanlara düşen cxgrid viewinin columlarınada denk düşen editin tagını verdim.

Kod: Tümünü seç

colAd.tag := 1;
colsoyad.tag := 2;
...
Sonra bütün editlerin onchange olayını bir procedure yönlendirdim.
Onada şöyle bir kod yazdım

Kod: Tümünü seç

procedure TF_YapiBul.edPaftaPropertiesChange(Sender: TObject);
var
  cxfilter :TcxDBDataFilterCriteria;
  i:integer;
  function getcolbytag(tagno:integer):TcxGridDBBandedColumn;
  var
    a:integer;
  begin
    for a := 0 to btv_YabiBul.ColumnCount-1 do
    begin
      if btv_YabiBul.Columns[a].Tag = tagno then
      begin
        result := btv_YabiBul.Columns[a];
        exit;
      end;
    end;
  end;

begin

// filtrelenicek column ların Taglarıyla, onlara denk düşen editlerin tagları aynı verildi
  cxfilter := btv_YabiBul.DataController.Filter;
  cxfilter.BeginUpdate;
  cxfilter.Clear;
  for i := 0 to self.ComponentCount-1 do
  begin
    if (Components[i].Tag in [1..8]) and
       (Components[i] is Tcxcustomtextedit)then
    begin
       if trim(Tcxcustomtextedit(Components[i]).Text) <> '' then
       begin
          cxfilter.AddItem(nil,getcolbytag(Components[i].Tag),folike,Tcxcustomtextedit(components[i]).Text + '%',Tcxcustomtextedit(components[i]).Text + '%');
       end;
    end;
  end;
  cxfilter.EndUpdate;

end;
Bu sistemle bayağ bir angarya koddan kurtulduğumu düşünüyorum. Bu yolla ekleyince hep 'and' kriteriyle ekleniyor. Ama araştırılırsa diğer operatorlerle nasıl ekleneceğide çözülür herhalde.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

teşekkürler arkadaşlar..... :)
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

arkadaslar bu like buyuk kucuk harfe duyarlıdır.. denedim oyle oldu.. bunu nasıl duyarsız yapabiliriz..
ben boyle bir yol denedim.. ama bu da sadece butun harfler ya buyuk ya kucukse uyar.. yannı filtreleme yapacağım alan buyuk kucuk harf karışıksa nasıl olacak
...

Kod: Tümünü seç

 
with cxGrid3DBTableView1.DataController.Filter do begin 
   Clear;
   Root.AddItem(cxGrid3DBTableView1hesapadi,foLike,cxTextEdit2.Text+ '%',cxTextEdit2.Text+ '%');
   Root.BoolOperatorKind := fboOr;
   Root.AddItem(cxGrid3DBTableView1hesapadi,foLike,UpperCase(cxTextEdit2.Text)+ '%',cxTextEdit2.Text+ '%');
   Active := true;
end ;
İnsanca.... Pek insanca....
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

cxGridDBBandeTableView.DataController.Filter.Options.fcoCaseInsensitive
ile oynayarak tekrar deneyiniz.

İyi çalışmalar.
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

sağol hakan can..
boyle bir şey olduğunu tahmın etmiştim.. ama kod olacağını sanıyordum.. işimi gordu.. true olunca duyarsız oluyor..
İnsanca.... Pek insanca....
Cevapla