Вниз
Скачать: CL | DM;

Не правильная сортировка для украинского языка   Найти похожие ветки 

← →
RDA   (2005-11-03 20:37) [0]

Компонент cxGrid от DevExpress не хочет(не умеет) правильно сортировать локальные данные для украинского языка. Подсказали что нужно использовать его событие OnCompare.


procedure TMainForm.tbvMainDataControllerCompare(
 ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2,
 AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer);
begin
 //
end;


Вот такое событие, что куда ... не знаю. Подскажите кто что может.


← →
sniknik ©   (2005-11-03 21:01) [1]

посмотри в справке дельфи по TListView.onCompare там даже пример есть, и сделай по аналогии.


← →
RDA   (2005-11-03 21:26) [2]

Смотрел, но не понял как решить проблему с украинским языком?


← →
RDA   (2005-11-03 21:28) [3]

Дочитал.


← →
RDA   (2005-11-03 21:38) [4]

Но не совсем понял. Как сделать чтобы работало для всех колонок?


← →
RDA   (2005-11-03 22:50) [5]

Вопрос снят.


← →
RDA   (2005-11-04 15:37) [6]

Вопрос открыт.

Что делать с датой?

У меня дата храниться в текстовом формате (т.к. ее может не быть, может состоять только из года и может быть в полном формате).

Если обрабатывается событие OnCompare для некоторых колонок, то остальные (для которых нет обработки) вообще не хотят сортироваться. Как поправить?


← →
RDA   (2005-11-04 18:29) [7]

Сделал так. Работает (вроде), может кто-что умнее подскажет, буду благодарен


procedure TMainForm.tbvMainDataControllerCompare(
 ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2,
 AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer);
var
 AValue1,AValue2: Variant;
begin
 if (V1 <> null) and (V2 <> null) then
   if AItemIndex <> 3 then
     Compare := AnsiCompareStr(V1,V2)
   else
   begin
     if Length(V1) = 4 then
       AValue1 := "01.01." + V1
     else
       AValue1 := V1;
     if Length(V2) = 4 then
       AValue2 := "01.01." + V2
     else
       AValue2 := V2;
     Compare := AnsiCompareStr(ReverseString(AValue1),ReverseString(AValue2));
   end
 else
   if (V1 = null) and (V2 = null) then
     Compare := 0
   else
     if V1 = null then
       Compare := -1
     else
       Compare := 1
end;


← →
Polevi ©   (2005-11-05 18:16) [8]

это рука москвы


← →
Step[B.M.]   (2005-11-06 20:49) [9]

не знаю будет ли в твоем случае это умнее, но сортировку украинского можно делать средствами FireBird
- при создании базы кодировка WIN1251
- в текстовых полях - пример
 TEXT_HIST VARCHAR(200) COLLATE WIN1251_UA,


← →
RDA   (2005-11-07 19:51) [10]

Дело в том что здесь имеет место пересортировка и хотелось ее сделать средствами этого самого грида (он это делает быстрее) нежели пересортировка средствами FIBPlus - локальная сортировка.

Код приведенный выше, некорректен. Неправильно сортирует по дате.
Может кому понадобиться вернее (мне так кажется) было бы так
Compare := AnsiCompareStr(FarmatDateTime("yyyy.mm.dd",AValue1), FormatDateTime("yyyy.mm.dd",AValue2));



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.025 c
2-1133684536
VadimSpb
2005-12-04 11:22
2005.12.25
Проблема с памятью


2-1134300688
markers
2005-12-11 14:31
2005.12.25
Динамическое создание компонетов


14-1133451826
TG
2005-12-01 18:43
2005.12.25
Скины


6-1127210598
__DATA__
2005-09-20 14:03
2005.12.25
Подключиться через TClientSocket к интернет серверу через прокси


2-1133941899
vitek
2005-12-07 10:51
2005.12.25
Регистрация DLL




   Наверх