Шаг 14.
Технология ADO.
Пример. Сортировка записей

    На этом шаге мы рассмотрим пример приложения, иллюстрирующего сортировку записей.

    Приложение представлено на рисунке 1:


Рис. 1. Приложение в работе

    Приложение позволяет выбирать тип сортировки: по-возрастанию или по-убыванию. Для этого используется компонент RadioGroup1:

   procedure TForm1.RadioGroup1Click(Sender: TObject);
   Begin
     if RadioGroup1.ItemIndex=1
     then Vid:='DESC,'
     else Vid:='ASC,';
   End;

    Обработчик события OnTitleClick компонента DBGrid1 позволяет осуществлять сортировку записей при щелчке на заголовке столбца сетки DBGrid1.

   procedure TForm1.DBGrid1TitleClick(Column: TColumn);
   Begin
     Datamodule1.ADOTable1.IndexFieldNames := Column.Field.FieldName+' '+Vid;
   End;


    Замечание. Все невизуальные компоненты данного приложения (ADOTable1, ADOConnection1 и т. д.) расположены в модуле данных. Модуль данных удобно использовать для того, чтобы не нагружать окно главной формы лишними компонентами, к тому же модуль данных можно использовать в нескольких приложениях. Создать модуль данных можно сделующим образом: File | New | Others. В результате откроется окно хранилища объектов, где нужно дважды щелкнуть на значке Data Module. Не забудьте связать модуль данных со своим проектом.

    Приложение содержит два списка ListBox1 и ListBox2. В первом списке содержатся все поля, по которым можно осуществлять сортировку записей. Выбрав в списке полей необходимое поле его можно поместить в список полей сортировки с помощью кнопки SpeedButton1 (стрелка вправо). С помощью кнопок SpeedButton2 (стрелка вверх) и SpeedButton3 (стрелка вниз) можно менять положения строк в списке полей сортировки.

    Кнопка Сортировать позволяет отсортировать данные в соответствии со списком полей сортировки и типом сортировки (по возрастанию или по убыванию). Обработчик этого события имеет следующий вид:

   procedure TForm1.Button2Click(Sender: TObject);
   var
      i : Byte;
      Help : String;      
   Begin
     if (ListBox2.items.Count=0)
     then MessageDlg('Список полей сортировки пуст!',mtInformation,[mbOK],0)
     //Если список полей сортировки пуст, то выводим соответствующее сообщение
     else
        Begin
          for i:=0 to  ListBox2.items.Count-1 do
            Begin
             if ListBox2.items[i]='Фамилия' then Help:='Fam '
             else
               if ListBox2.items[i]='Имя' then Help:='Name '
               else
                 if ListBox2.items[i]='Команда' then Help:='TeamName '
                 else
                   if ListBox2.items[i]='Номер' then Help:='Nomer '
                   else
                     if ListBox2.items[i]='Позиция' then Help:='Position '
                     else
                       Help:='Strana ';
             Str:=Str+Help+Vid; //Формируем строку Str из списка полей сортировки
            End;       
          Str[Length(str)]:=' ';
          DataModule1.ADOTable1.Sort:=Str; 
          //Формируем свойство Sort компонента ADOTable1
          Str:=''; //Очищаем строку
        End;
   End;

    Полный текст этого приложения можно взять здесь. Файлы базы данных, используемой в приложении можно взять здесь.

    На следующем шаге мы рассмотрим пример приложения, иллюстрирующего фильтрацию записей.




Предыдущий шаг Содержание Следующий шаг