![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не правильная сортировка для украинского языка [D6, Firebird]
RDA © (2005-11-03 20:37:00)Компонент cxGrid от DevExpress не хочет(не умеет) правильно сортировать локальные данные для украинского языка. Подсказали что нужно использовать его событие OnCompare.
procedure TMainForm.tbvMainDataControllerCompare(
ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2,
AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer);
begin
//
end;
Вот такое событие, что куда ... не знаю. Подскажите кто что может.
RDA (2005-11-07 19:51:00) [1]Дело в том что здесь имеет место пересортировка и хотелось ее сделать средствами этого самого грида (он это делает быстрее) нежели пересортировка средствами FIBPlus - локальная сортировка.
Код приведенный выше, некорректен. Неправильно сортирует по дате.
Может кому понадобиться вернее (мне так кажется) было бы так
Compare := AnsiCompareStr(FarmatDateTime('yyyy.mm.dd',AValue1), FormatDateTime('yyyy.mm.dd',AValue2));
Step[B.M.] (2005-11-06 20:49:00) [2]не знаю будет ли в твоем случае это умнее, но сортировку украинского можно делать средствами FireBird
- при создании базы кодировка WIN1251
- в текстовых полях - пример
TEXT_HIST VARCHAR(200) COLLATE WIN1251_UA,
Polevi (2005-11-05 18:16:00) [3]это рука москвы
RDA (2005-11-04 18:29:00) [4]Сделал так. Работает (вроде), может кто-что умнее подскажет, буду благодарен
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;
RDA (2005-11-04 15:37:00) [5]Вопрос открыт.
Что делать с датой?
У меня дата храниться в текстовом формате (т.к. ее может не быть, может состоять только из года и может быть в полном формате).
Если обрабатывается событие OnCompare для некоторых колонок, то остальные (для которых нет обработки) вообще не хотят сортироваться. Как поправить?
RDA (2005-11-03 22:50:00) [6]Вопрос снят.
RDA (2005-11-03 21:38:00) [7]Но не совсем понял. Как сделать чтобы работало для всех колонок?
RDA (2005-11-03 21:28:00) [8]Дочитал.
RDA (2005-11-03 21:26:00) [9]Смотрел, но не понял как решить проблему с украинским языком?
sniknik (2005-11-03 21:01:00) [10]посмотри в справке дельфи по TListView.onCompare там даже пример есть, и сделай по аналогии.