Главная страница
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.044 c
9-1122456076
Дед с Морковкой
2005-07-27 13:21
2005.12.25
Формат рисунка dds.


14-1132556014
syte_ser78
2005-11-21 09:53
2005.12.25
самый страшный фильм


2-1134291163
PAVIA
2005-12-11 11:52
2005.12.25
Числа размером 64бита.


14-1133422507
Ega23
2005-12-01 10:35
2005.12.25
С днем рождения! 1 декабря


2-1133802468
silver_dragon
2005-12-05 20:07
2005.12.25
проблемы с компилированием(???)