...implement a filter mechanism for a stringgrid?
|
Autor:
Schatzl Reinhard |
[ Print tip
] | | |
// Filter Liste zum sichern des Gridinhalt
// save the original content
var
FilterList : TStringList;
// Filter setzen
// set the filter
procedure TForm1.SetFilter(ACol:Integer;Exp:String);
var
I,Counter:Integer;
begin
FilterList:=TStringList.Create;
With Grid do
begin
//Filterliste mit Gridinhalt füllen
For I := FixedRows To RowCount - 1 Do
FilterList.Add(Rows[I].Text);
//Grid filtern
Counter:=FixedRows;
For I := FixedRows To RowCount - 1 Do
Begin
If Cells[ACol,I] <> Exp Then
Begin
Rows[I].Clear;
end
Else
begin
If Counter <> I Then
Begin
Rows[Counter].Assign(Rows[I]);
Rows[I].Clear;
End;
Inc(Counter);
End;
End;
RowCount:=Counter;
End;
end;
// Gridinhalt wiederherstellen
// restore the original content
procedure TForm1.RestoreFilter;
var
I:Integer;
begin
With Grid do
begin
RowCount:=FixedRows+FilterList.Count;
For I:=0 To FilterList.Count - 1 Do
Rows[FixedRows+I].Text := FilterList.Strings[I];
End;
FilterList.Free;
end;
//Example
procedure TForm1.BtnSetFilterClick(Sender: TObject);
begin
//Grid nach Zellinhalt der markierten Zelle filtern
SetFilter(Grid.Col,Grid.Cells[Grid.Col,Grid.Row]);
end;
procedure TForm1.BtnRestoreFilterClick(Sender: TObject);
begin
RestoreFilter;
end;
|