2017-02-02 15 views
2

cxGridでソートをプリフォームする方法 Latin-2(ISO-8859-2)エンコーディング?cxGrid Unicodeソート

グリッドをWindowsの地域設定に依存させたくありません。 問題は私がスロベニアにいることですが、私はクロアチア語でソートする必要があります。 (現在、Ć、Č、Šは適切にソートされていません)

できますか?

+0

私はこのことについてDevexのサポートに尋ねるのが一番良いと思います。 Googleは、あなたのqから離れて、 "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