На этом шаге мы рассмотрим пример приложения, иллюстрирующего сортировку записей.
Приложение представлено на рисунке 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;
Приложение содержит два списка 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;
Полный текст этого приложения можно взять здесь. Файлы базы данных, используемой в приложении можно взять здесь.
На следующем шаге мы рассмотрим пример приложения, иллюстрирующего фильтрацию записей.