Форум: "Базы";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
ВнизНе правильная сортировка для украинского языка Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c