Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Aufgaben mit LiveBindings und Delphi-DB's erledigen

  Alt 4. Mai 2016, 23:16
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.
Miniaturansicht angehängter Grafiken
result.jpg  

Geändert von Harry Stahl ( 4. Mai 2016 um 23:20 Uhr)
  Mit Zitat antworten Zitat