![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по сортировке данных в TDBGrid'e. [D6]
Vigo © (2004-10-12 21:28:00)Имеется текстовый файл с данными, с которым программа работает через TClientDataSet. Эти данные отображаются в TDBGrid'e. Есть необходимость сортировать эти данные по разным полям, а также стоит задача реализовать работу с данными без использования BDE, в связи с чем для решения задачи сортировки данных невозможно использование Order By.
Поэтому сортировка данных реализована следующим образом. Под TDBGrid'ой лежит TRadioGroup, с помощью которой пользователь выбирает поля, по которым сортируются данные:
begin
if RadioGroup.ItemIndex=0 then StaffDb.IndexFieldNames:='ID'
else if RadioGroup.ItemIndex=1 then
StaffDb.IndexFieldNames:='Family';
else if RadioGroup.ItemIndex=2 then
StaffDb.IndexFieldNames:='CardType'
else if RadioGroup.ItemIndex=3 then
StaffDb.IndexFieldNames:='Otdel';
end;
Когда сортировка происходит по полю содержащему числовые значения, то все нормально. А по символьному полю сортируется неправильно (не по алфавиту).
Как сделать так, чтобы символьное поле сортировалось по алфавиту?
vigo (2004-10-28 17:22:00) [1]Здравствуйте, думал помогло и забыл. Теперь завел фамилию - на букву "ч". Фамилия оказалась перед "А" и пошло поехало. Изменение DBGrid.Font.Charset не помогает. Сортирую вроде бы также (только по нажатию на название поля DBGrid'a (DBGridTitleClick):
ClientDataSet.IndexFieldNames:= Column.Field.FieldName;
vigo (2004-10-13 11:45:00) [2]Ура... Заработало! (Вот уж не думал, что в этом дело; по дефолту сортирует нормально, а установка рашн чарсет нет...)
sniknik (2004-10-13 11:06:00) [3]вот в этом и ошибка, наверное, ставь Charset по дефаулту (по идее на русской винде это и есть русский но может есть какие различия именно в методах сортировки х.з.).
и у меня кстати дельфя седьмая... тоже может быть, разница... могу тестик какой нибудь скомпилить для проверки, будет на твоей машине отличатся?
vigo (2004-10-13 10:49:00) [4]Настраивал. Все установил DBGrid1.Font.Charset:='Russian_CharSet' и DBGrid1.Font.Name:='Times New Roman'. Тоже самое с DBGrid1.TitleFont.
Попробую изменить на что-нить другое...
sniknik (2004-10-13 00:32:00) [5]странно, проверил, все правильно сортирует и с рускими буквами тоже. чето ты там не все говориш.
у меня даже от Transliterate (по идее должно) у поля сортировка не зависит (те несколько что забил для примера правильно засортировались)
признавайся, ничего с кодировками не делал? отображение фонтами в гриде не настраивал? и т.д.
sniknik (2004-10-13 00:07:00) [6]with StaffDb do
case RadioGroup.ItemIndex of
0: IndexFieldNames:='ID';
1: IndexFieldNames:='Family';
2: IndexFieldNames:='CardType';
3: IndexFieldNames:='Otdel';
end;
лучше выглядит ;о), а вот с индексом проблемы, небось руские данные ортируются? а ленгдрайвера то и нет... кто ему руский язык обьяснять будет? ;о)
теоретически конечно, специально пробовать не стал. нет у него (вроде бы) локализации. вот он и сортирует буквы как бинарные данные.
обойти можно наверное, ну придумать там доп. поле куда значения для индекса писать в нужном порядке... или чтото другое. но проше по моему заменить его на ADODataSet, у него с локализацией все в порядке не раз проверено, руские сортирует правильно.
а вообще подожди, тут народ есть кто и на клиентских датасетах собаку сьел ;о)) может придумают что.