다음은 DevExpress 그리드의 필터에서 filtertype 연산자를 얻는 데 사용하는 코드입니다. OperatorKindToStr은 필터에서 operatorkind를 문자열로 추출하여 XML 파일에 저장하는 데 사용됩니다. StrToOperatorKind는 xml의 문자열을 필터로 변환하여 operatorkind를 설정하는 데 사용됩니다.DevExpress TcxFilterOperatorKind를 문자열로 변환하거나 변환합니까?
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;
은 분명히 나는 StrToOperatorKind와 OperatorKindToStr 조금 똑똑하고 싶다. VCL TypeInfo에서 GetEnumProp 메서드를 시도했지만 작동하지 않습니다. 그래서 aFilterItem 변수에서 TcxFilterOperatorKind 속성을 문자열로 그리고 TcxFilterOperatorKind로 다시 추출 할 수 있습니까?
네! 맞았 어. 조언 해주셔서 감사합니다. –