Konvertieren eines DevExpress TcxFilterOperatorKind zu und aus einem String?
-
05-07-2019 - |
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?
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.