2017-02-02 10 views
2

cxGrid에서 정렬을 수행하는 방법 Latin-2 (ISO-8859-2) 인코딩을 사용하고 있습니까?cxGrid 유니 코드 정렬

그리드가 Windows의 국가 별 설정에 종속되지 않게하고 싶습니다. 문제는 내가 슬로베니아에 있지만 크로아티아어 언어로 정렬해야한다는 것입니다. (지금은 Ć, Č, Š가 제대로 정렬되지 않았습니다)

할 수 있습니까?

+0

나는 이것에 대해 Devex의 지원을 요청하는 것이 최선이라고 생각합니다; Google은 "tcxgrid latin-2"와 관련이없는 옆에있는 것으로 보입니다. – MartynA

답변

2

당신은 cxGrid에 대한 DBTableView의 DataController에 의해 노출 된 OnCompare 이벤트 후크와 같은 핸들러 뭔가 구현할 수 :

procedure TMyForm.cxGrid1DBTableView1DataControllerCompare( 
       ADataController: TcxCustomDataController; 
       ARecordIndex1, ARecordIndex2, AItemIndex: Integer; 
       const V1, V2: Variant; 
       var Compare: Integer); 
var 
    S1, S2  : String; 
    CompareResult: Integer; 

begin 
    S1 := V1; 
    S2 := V2; 
    CompareResult := CompareStringW(LANG_CROATIAN, 0, pWideChar(S1), -1, 
                pWideChar(S2), -1); 
    case CompareResult of 
    CSTR_LESS_THAN : Compare := -1; 
    CSTR_EQUAL  : Compare := 0; 
    CSTR_GREATER_THAN : Compare := 1; 
    end; 
end; 

경우, S1 = 'C, C, S-'와 S2 = '를 Č, Ć, Š '그리고 나서 S1> S2로 예상된다. LOCALE_NEUTRAL로 전환하면 반대 결과를 얻습니다.

모든 열이 원하는대로 캐스트 될 수 있으므로 V1 및 V2를 문자열로 변환 할 때는주의해야합니다. 예를 들어, 날짜는 특별한 대우가 필요할 수 있습니다.

또한 CompareStringW는 함수가 실패 할 경우 0을 반환합니다. 완전한 구현은 이것을 처리해야 할 수도 있습니다.

+0

이것은 실제로 devexpress 지원이 제안한 것입니다. – user763539