Frage

Ich bin mit einem DevExpress TdxMemData in memory TDataSet-Nachkomme.Während es Gefiltert:Boolesche und-Filter:String-Eigenschaften, es erscheint nicht eigentlich nichts mit Ihnen automatisch, anstatt sich auf das Ergebnis der OnFilterRecord-Ereignis Akzeptiert parameter.

Was ich also Suche, ist ein Weg (vielleicht ist es in TdxMemData oder irgendwo sonst in DevExpress s suite of code), um eine Analyse der text-filter und wenden Sie es auf das Dataset.

Idealerweise würde ich gerne eine Möglichkeit zu testen, die eine einzelne Zeile für den filter, um zu sehen, ob es passt ohne es zu filtern aus dem dataset (ich möchte hervorheben, Zeilen, die dem filter entsprechen).

Beispiel filter Zeichenfolge:

((Name = 'Jim') and (Rep > 1000)) or (Rep > 5000)

So gibt es verschachtelte und-und oder ist.Es ist eigentlich gebaut von der DevExpress TcxDBFilterControl.

Bin ich wirklich hoffe, dass es etwas einfaches gibt, das ich vermisse.

Update: Ich öffnete eine ticket mit DevExpress um zu sehen, ob Sie unterstützen jede Art von Lösung.Ich fand Ihre Lager zu beantworten Sie unterstützen keine Filterung auf TdxMemData.

War es hilfreich?

Lösung

Ich weiß, das ist nicht die Antwort, die Sie suchen, aber die TdxMemData dataset unterstützt keine filter strings.Die Verwendung von filtern code entweder Ihr eigenes OnFilterRecord-Ereignis oder set ProgrammedFilter zu wahren, und füllen Sie die FilterList mit einer Liste der Datensätze, die gefiltert werden (zur Laufzeit).

Eine Möglichkeit wäre die code Sie Ihren eigenen parser zu vergleichen, die filter-Zeichenfolge, die gegen den aktuellen Datensatz in der OnFilterRecord-Ereignis.

Andere Tipps

Vielleicht möchten Sie sich beim ersetzen der TdxMemData mit TkbmMemTable.Es ist kostenlos, funktioniert ähnlich wie der DX-Komponente und unterstützt filter-strings.Wahrscheinlich würde nehmen viel weniger Zeit zu portieren, als Sie es wäre, einen filter zu implementieren string parser in OnFilterRecord!Es werden arbeiten mit den anderen DX-Komponenten ohne Probleme.

Was du suchst ist nicht die Daten filtern, aber eine Sache, die die Anzeige es sich anders, wenn es eine Bedingung erfüllen.Wenn Sie ein TDBGrid, um die Daten anzuzeigen, Blick in die DrawColumnCell () - Ereignis auf dem TDBGrid:

procedure TForm1.dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  DBG: TDBGrid;
begin
  DBG := TDBGrid(Sender);
  // Add any other conditions from your 'filter' here in the next line.
  if (YourData.FieldByName('WHATEVER').AsString = 'Jim') and
     (YourData.FieldByName('REP').AsInteger > 1000) then
    Column.Font.Color := clRed;
  DBG.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Da Sie mit TdxMemData, sind Sie wahrscheinlich mit der DevEx-grid, too.Es hat eine ähnliche Art und Weise zu tun, etwas anderes als die Standard-Zeichnung;Sie verwenden können eine ähnliche Technik gibt.(Ich habe nicht benutzt, die DevEx Zeug in ein paar Jahren;aktuellen Arbeitgeber nicht mag, und deshalb wird nicht der Frühling für die Kosten.:-( )

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top