gpt4 book ai didi

delphi - cxGrid Unicode 排序

转载 作者:行者123 更新时间:2023-12-02 08:12:53 24 4
gpt4 key购买 nike

如何让cxGrid执行排序Latin-2 (ISO-8859-2) 编码?

我不希望网格依赖于 Windows 的区域设置。问题是我在斯洛文尼亚,但我需要用克罗地亚语进行排序。(目前 Ć,Č,Š 未正确排序)

可以吗?

最佳答案

您可以 Hook DBTableView 的 DataController 为 cxGrid 公开的 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 = 'Ć,Č,Š' 并且 S2 = 'Ć,Ć,Š' 则 S1 > S2,我认为这是预期的。如果切换到 LOCALE_NEUTRAL,您会得到相反的结果。

将 V1 和 V2 转换为字符串时应小心,因为并非所有列都可以按所需方式转换。例如,日期可能需要特殊处理。

另请注意,如果函数失败,CompareStringW 将返回 0。完整的实现可能必须解决这个问题。

关于delphi - cxGrid Unicode 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42005756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com