2009-09-09 3 views
1

다음은 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로 다시 추출 할 수 있습니까?

답변

1

GetEnumNameGetEnumValue Mason이 지적한대로.

그리고 당신의 기능을 훨씬 더 간단하게한다 :

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; 
+0

네! 맞았 어. 조언 해주셔서 감사합니다. –

1

GetEnumProp은 사용자가하려는 작업에 잘못된 기능이있어서 작동하지 않았습니다. 그래도 끝이야. TypInfo 유닛에있는 GetEnumName과 GetEnumValue를 시도해보십시오.

관련 문제