Ok, das Event (OnFilterRecord) behalte ich mal in Reserve. Momentan kann ich es wie gewünscht per "Like" lösen, wobei man das in Zusammenhang mit "%" nutzen muss.
Der folgende Filter liefert mir wie gewünscht eine Suche über alle Felder, für den Begriff "grid" alle Einträge zurück, der ihn als Teil enthält (zusätzlich wird noch ein StandardFilter berücksichtigt [FrameWorkFilter], wenn der nicht Leer ist):
Delphi-Quellcode:
procedure TF_ConvertList.bnFindChange(Sender: TObject);
var
find, AllFieldsFilter: String;
L: Integer;
begin
cds1.Filtered := False;
if bnfind.Text <> '' then begin
find := QuotedStr ('%'+ bnFind.Text+'%'); //<-- "%" mit Like, "*" für PartialRight-Suche
for L := 0 to cds1.FieldCount-1 do begin
if L = cds1.FieldCount-1 then begin
AllFieldsFilter := AllFieldsFilter + cds1.FieldList[L].FieldName + ' like ' + find;
end else begin
AllFieldsFilter := AllFieldsFilter + cds1.FieldList[L].FieldName + ' like ' + find + ' OR ';
end;
end;
if FrameWorkFilter <> '' then begin
cds1.Filter := FrameWorkFilter + ' and (' + AllFieldsFilter + ')';
end else begin
cds1.Filter := AllFieldsFilter;
end;
end else begin
cds1.Filter := FrameWorkFilter;
end;
cds1.Filtered := (bnFind.Text <> '') or (FrameWorkFilter <> '');
end;
vgl. Resultat der Suche im anliegenden Screenshot. Einen Platzhalter für Feldnamen, der für alle Felder steht, scheint es ja nicht zu geben (Hinweis, ich verwende hier nur das ClientDataset mit dem Datasource, ohne eine Datenbank dahinter).
Insgesamt scheint sich ja da eine erfreuliche Bandbreite an Möglichkeiten aufzutun.