Filtrowanie DataSet'a

0

Witam

Mam pytanie odnośnie filtrowanie DataSet'a. Używam SMDBGrida, ma on możliwość zaznaczania paru wierszy. Chciałbym, aby po np. naciśnięciu jakiegoś buttona SMDBGrid wyświetlał mi tylko wcześniej zaznaczone wiersze. Robie to tak:

SMDBGrid1.DataSource.DataSet.Filtered:=true;
  for i:=0 to SMDBGrid1.SelectedRows.Count-1 do
  begin
    SMDBGrid1.ClearFilter;
    SMDBGrid1.DataSource.DataSet.Filter:='NR_PZ = '+tab[i]+'';
     SMDBGrid1.ApplyFilter;
  end;

Wszystko spoko,ale po przefiltrowaniu wyświetla mi tylko ostatnio zaznaczony wiersz.

0

I co, zdziwiony? :)
Weź na spokojnie przeanalizuj tę pętlę..

0

Jeśli chodzi o

SMDBGrid1.ClearFilter;

to faktycznie przekombinowałem- nie wiem, po co to tam wsadziłem,ale to nie to. Wyrzuciłem i też nie działa. Ale jestem zły-> oczywiście na siebie.

0

Ta linia:

SMDBGrid1.DataSource.DataSet.Filter:='NR_PZ = '+tab[i]+'';

też nie jest lepsza.. :)

0

W Delphi piszę dopiero jakieś 3 m-ce. Proszę o wyrozumiałość i ewentualne sugestie.

0

Use Filter to specify a dataset filter. When filtering is applied to a dataset, only those records that meet a filter's conditions are available. Filter describes the filter condition. For example, the following filter condition displays only those records where the State field is 'CA' or 'MA':

State = 'CA' or State = 'MA'
When a filter is set, Blank records do not appear unless explicitly included in the filter. For example:

State <> 'CA' or State = NULL
When a field name contains spaces, you must enclose the field name in brackets. For example:

[Home State] = 'CA' or [Home State] = 'MA'

Ty cały czas zamazujesz filtr następną wartością. Musisz użyć słowa kluczowego or:

var
  s: string;
begin
  {...}
  if SMDBGrid1.SelectedRows.Count <= 0 then
    Exit;

  SMDBGrid1.ClearFilter;
  s := 'NR_PZ = '+tab[0];
  for i := 1 to SMDBGrid1.SelectedRows.Count-1 do
     s := s + ' or NR_PZ = ' + tab[i];
  SMDBGrid1.DataSource.DataSet.Filter := s;
  SMDBGrid1.ApplyFilter;
  {...}

Zapewne dobrze też byłoby użyć funkcji BeginUpdate i EndUpdate, ale to już zależy od konkretnej implementacji.

0

Nie bardzo wiem, co masz w tab[], ale chyba będzie trzeba również zastosować funkcję QuotedStr(tab[i])

0

W tab[i] mam przechowywane wartości NR_PZ (nazwa pola w bazie) sczytane z SMDBGrida podczas zaznaczania wierszy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1