Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: 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 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
2-1134125888
kvorubin
2005-12-09 13:58
2005.12.25
Мужики, как сравнить 2 списка со словами???


2-1134384927
De1uxe
2005-12-12 13:55
2005.12.25
Работа с битовыми образами


10-1109669552
Redhopter
2005-03-01 12:32
2005.12.25
Закрытие com-хранилищ


14-1133271489
baks_uz
2005-11-29 16:38
2005.12.25
Дельфи глазами Хакера


2-1134137935
Гость2
2005-12-09 17:18
2005.12.25
свой курсор