s.a.
arkadaslar bir alanı filtrelemek üzeler tıklayınca , aşağıda o kolonun değerleri sıralanıyor ...
birini seçtik mi ona göre filtreleme yapıyor..
ikinci bir kolonu filtreleme yapmak istediğimizde, filtre listesine görünen değerler değil de tüm değerler geliyor.. yani ikinci filtrenin itemleri ilk filtreyi dikkate almıyor..
..
bunu çözmenin bir yolu var mı ..
cxgrid filtreleme (birden fazla kolonu)
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
cxgrid filtreleme (birden fazla kolonu)
İnsanca.... Pek insanca....
beni yanlış anladınız..
sanırım dediğiniz sey gride uyguladığın filtreyi dataset e yansıtıyorr..
bu dataseti yormaz mı..
mesela adı alanını mehmet diye süzdüm
10 kişi kaldı..
soyadı alanını süzmeye çalıştığımda sadece mehmet lerin soyadı gelsin.. oysa bende bütün soyadlar listeleniyor
sanırım dediğiniz sey gride uyguladığın filtreyi dataset e yansıtıyorr..
bu dataseti yormaz mı..
mesela adı alanını mehmet diye süzdüm
10 kişi kaldı..
soyadı alanını süzmeye çalıştığımda sadece mehmet lerin soyadı gelsin.. oysa bende bütün soyadlar listeleniyor
İnsanca.... Pek insanca....
Elbette bu da mümkün.
cxGrid1DBBandedTableView1.DataController.Filter.OnGetValueList
eventi var. Orada istediğinizi biraz kod yazarak yapabilirsiniz. Helpinde güzel bir example da var.
Ben o eventle DataSet'in her hangi bir edit modunda olup olmadığını kontrol edip eğer edit modunda ise filtre işlemini ikaz ile abort ettiriyorum.
İyi çalışmalar.
cxGrid1DBBandedTableView1.DataController.Filter.OnGetValueList
eventi var. Orada istediğinizi biraz kod yazarak yapabilirsiniz. Helpinde güzel bir example da var.
Ben o eventle DataSet'in her hangi bir edit modunda olup olmadığını kontrol edip eğer edit modunda ise filtre işlemini ikaz ile abort ettiriyorum.
İyi çalışmalar.
Kod şu şekilde:
İyi çalışmalar.
Kod: Tümünü seç
procedure TMyMainDataEntranceForm.cxGrid1DBBandedTableView1DataControllerFilterGetValueList(
Sender: TcxFilterCriteria; AItemIndex: Integer;
AValueList: TcxDataFilterValueList);
var
I, F: Integer;
St1: string;
aRowInfo: TcxRowInfo;
aList: TStringList;
begin
if cxGrid1DBBandedTableView1.DataController.DataSet.State in dsEditModes then Abort;
if cxGrid1DBBandedTableView1.Columns[AItemIndex].Filtered then Exit;
if cxGrid1DBBandedTableView1.Columns[AItemIndex].DataBinding.FieldName <> '' then
if not (cxGrid1DBBandedTableView1.Columns[AItemIndex].DataBinding.Field.DataType in [ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftAutoInc, ftFixedChar, ftWideString, ftLargeint, ftTimeStamp, ftFMTBcd]) then Exit;
if cxGrid1DBBandedTableView1.DataController.Filter.FilterText = '' then Exit;
if cxGrid1DBBandedTableView1.DataController.FilteredRecordCount = cxGrid1DBBandedTableView1.DataController.RecordCount then Exit;
aList := TStringList.Create;
try
Screen.Cursor := crHourGlass;
aList.Sorted := TRUE;
aList.CaseSensitive := TRUE;
for I := 0 to cxGrid1DBBandedTableView1.DataController.RowCount - 1 do
begin
aRowInfo := cxGrid1DBBandedTableView1.DataController.GetRowInfo(I);
if cxGrid1DBBandedTableView1.Columns[AItemIndex].GroupIndex < 0 then
if aRowInfo.Level < cxGrid1DBBandedTableView1.DataController.Groups.GroupingItemCount then Continue;
St1 := VarToStr(cxGrid1DBBandedTableView1.DataController.Values[aRowInfo.RecordIndex, AItemIndex]);
if not aList.Find(St1, F) then aList.Add(St1);
end;
if aList.Count = 0 then Exit;
for I := AValueList.Count - 1 downto 0 do
if AValueList[I].Kind = fviValue then
if not aList.Find(VarToStr(AValueList[I].Value), F) then AValueList.Delete(I);
finally
aList.Free;
Screen.Cursor := crDefault;
end;
end;