Frage

Hier ist ein CodeSnippet ich verwende, um Filtertyp Operator von einem Filter in einem DevExpress Gitter zu erhalten: OperatorKindToStr wird verwendet, um von einem Filter als Zeichenkette zu extrahieren operatorkind und speichern sie in einer XML-Datei. StrToOperatorKind wird verwendet, um eine Zeichenfolge von XML zu konvertieren zurück eine operatorkind in einem Filter zu setzen.

const
  CUSTFILTER_FILTERITEM     = 'FilterItem';

function OperatorKindToStr(const aOperatorKind: TcxFilterOperatorKind): string;
begin
  Result := 'foEqual';
  case aOperatorKind of
    foEqual:        Result := 'foEqual';
    foNotEqual:     Result := 'foNotEqual';
    foLess:         Result := 'foLess';
    foLessEqual:    Result := 'foLessEqual';

  // Plus a boring list of other constants
end;

function StrToOperatorKind(const aOpKindStr: string): TcxFilterOperatorKind;
begin
  Result := foEqual;
  if aOpKindStr       = 'foNotEqual' then
    Result := foNotEqual
  else if aOpKindStr  = 'foLess' then
    Result := foLess
  else if aOpKindStr  = 'foLessEqual' then
    Result := foLessEqual
  else if aOpKindStr  = 'foGreater' then
    Result := foGreater
  else if aOpKindStr  = 'foGreaterEqual' then
    Result := foGreaterEqual

  // Plus a boring list of other if-else
end;

procedure UseStrToOperatorKind(const aFilterItem: IXmlDomElement);
begin
  if aFilterItem.nodeName = CUSTFILTER_FILTERITEM then
  begin                              // It is an FilterItem
    vStr := VarToStr(aFilterItem.getAttribute(CUSTFILTER_COLPROP));  // Get the columnname
    vOperatorKind := StrToOperatorKind(aFilterItem.getAttribute(CUSTFILTER_ITEMOPERATOR));
end;

procedure UseOperatorKindToStr(const aFilterItem: TcxCustomFilterCriteriaItem);
var
  vStr: String;
begin
  if Supports(TcxFilterCriteriaItem(aFilterItem).ItemLink, TcxGridColumn, GridCol) then
    vStr := OperatorKindToStr(TcxFilterCriteriaItem(aFilterItem).OperatorKind);
end;

Offenbar will ich die StrToOperatorKind und OperatorKindToStr ein bisschen schlauer sein. Ich habe in VCL Typeinfo GetEnumProp Methode versucht, aber es wird nicht funktionieren. Also, wie kann ich die TcxFilterOperatorKind Eigenschaft aus einer aFilterItem Variable in einen String extrahieren und zurück zu einem TcxFilterOperatorKind?

War es hilfreich?

Lösung

Mit dem GetEnumName und GetEnumValue Duett als Mason hingewiesen.

Und Ihre Funktionen sollten sich viel einfacher:

function OperatorKindToStr(const aOperatorKind: TcxFilterOperatorKind): string;
begin
  Result := GetEnumName(TypeInfo(TcxFilterOperatorKind), Ord(aOperatorKind));
end;

function StrToOperatorKind(const aOpKindStr: string): TcxFilterOperatorKind;
begin
  Result := TcxFilterOperatorKind(GetEnumValue(TypeInfo(TcxFilterOperatorKind), aOpKindStr));
end;

Andere Tipps

GetEnumProp hat nicht funktioniert, weil es die falsche Funktion ist für das, was Sie zu tun versuchen. Sie sind in der Nähe, aber. Versuchen Sie GetEnumName und GetEnumValue, die auch in der Typinfo Einheit.

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