При работе с TcxGrid в DevExpress может возникнуть проблема с сортировкой строк, связанная с использованием локали. По умолчанию сравнение строк осуществляется на основе последовательности кодовых точек (ordinal values), что может привести к некорректному отображению символов с диаkritickými znaménky (например, á, é, í, ó, ú, ý) в восточноевропейских языках.
Проблема
В коде cxVariants.pas используется следующий алгоритм сравнения двух переменных V1 и V2:
if VarIsEmpty(V1) then
if VarIsEmpty(V2) then
Result := 0
else
Result := -1
else
if VarIsEmpty(V2) then
Result := 1
else
if V1 = V2 then
Result := 0
else
if V1 < V2 then
Result := -1
else
Result := 1;
Тесты показывают, что выражение V1 < V2 работает аналогично функции CompareStr(V1, V2, loInvariantLocale), но обычно ожидается, что оно будет работать как CompareStr(V1, V2, loUserLocale). Это приводит к тому, что при сортировке в cxGrid символы с диаkritickými znaménky отображаются некорректно: вместо ожидаемого порядка aā .. zž сортировка происходит как a .. z, ā .. ž.
Решение
Для изменения поведения сортировки строк в TcxGrid DevExpress можно воспользоваться опцией dcoAnsiSort контроллера данных (DataController). Эта опция позволяет использовать настройки локали Windows для сортировки записей, что делает сравнение строк более корректным для языков с символами с диаkritickými znaménky.
Чтобы включить эту опцию, нужно установить значение свойства Options.dcoAnsiSort контроллера данных в True:
После этого TcxGrid начнет использовать настройки локали Windows для сортировки записей, что приведет к корректному отображению символов с диаkritickými znaménky.
Заключение
с помощью опции dcoAnsiSort контроллера данных позволяет добиться корректного отображения символов с диаkritickými znaménky в восточноевропейских языках. Это делает работу с TcxGrid более удобной и соответствующей ожиданиям пользователей.
В этом тексте описывается проблема с некорректной сортировкой символов с диаkritickými znaménky в TcxGrid DevExpress из-за использования локали по умолчанию и предлагается решение, заключающееся в использовании опции dcoAnsiSort для корректной с
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS