DBGrid Sortowanie + Filtrowanie

0

Witam!

  1. Potrzebuję zrobić coś takiego. DBGrid (bądź jakis jego klon), który ma mozliwość, że po kliknięciu na nazwę kolumny (a w zasadzie na ikonkę np. strzałki w dół - coś takiego widziałem w excelu) wyskoczy combobox, w którym jest filtr dla danej kolumny. Po wybraniu wartości z comboboxa w DBGrid zostaną tylko wiersze zawierające wybrany filtr.

  2. I drugie pytanko... Odnośnie sortowania w DBGrid (Może być coś innego, darmowego). Wiem że jest w googlach i na tym forum wiele takich tematów... ale mój problem wygląda tak: wykorzystuję komponent tDbf i DBGrid (dane wczytywane z pliku *.dbf). Chciałbym zrobić sortowanie po kliknieciu na nazwę kolumny. Niestety nie wchodzi w grę opcja z 'ORDER BY' ponieważ nie ma tu żadnych zapytań. Nie działa mi również opcja z indeksami klienta (po prostu nic się nie dzieje... może coś przeoczyłem). A robię to tak:

procedure TForm1.SMDBGrid1TitleClick(Column: TColumn);
begin
if Dbf1.IndexFieldNames = Column.Field.FieldName then
Dbf1.IndexFieldNames:=Column.Field.FieldName + 'DESC'
else
Dbf1.IndexFieldNames:=Column.Field.FieldName;
end;

Proszę o jakieś pomocne wskazówki. Z góry dzięki!

0
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
 const PreviousColumnIndex : integer = -1;
{$J-}
begin
  if DBGrid1.DataSource.DataSet is TCustomADODataSet then
  with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
  begin
    try
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
    except
    end;

    Column.title.Font.Style := 
    Column.title.Font.Style + [fsBold];
    PreviousColumnIndex := Column.Index;

    if (Pos(Column.Field.FieldName, Sort) = 1)
    and (Pos(' DESC', Sort)= 0) then
      Sort := Column.Field.FieldName + ' DESC'
    else
      Sort := Column.Field.FieldName + ' ASC';
  end;
end;
0
RedbaK napisał(a)
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
 const PreviousColumnIndex : integer = -1;
{$J-}
...

A tą stałą to chyba trzeba zrobić jako pole formatki a nie zmienną lokalną ...

0

To już przerabiałem... TDbf nie ma metody SORT tak jak np. ADODataSet. Jakieś inne propozycje?

0

musisz mieć indeksy i nimi manipulować. Ew jakiś MemoryDataSet i go sortować

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