Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по сортировке данных в 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, у него с локализацией все в порядке не раз проверено, руские сортирует правильно.

а вообще подожди, тут народ есть кто и на клиентских датасетах собаку сьел ;о)) может придумают что.


Наверх

Титульная страница Поиск, карта сайта Написать письмо