Как отсортировать записи в Delphi DBGrid по заголовку столбца

Delphi DBGrid это такой мощный компонент, что вы, вероятно, используете его каждый день, если вы разрабатываете приложения с поддержкой данных. Ниже мы рассмотрим, как добавить некоторые дополнительные функции в приложения базы данных, которые наверняка понравятся вашим пользователям.

Следуя концепциям, описанным в Руководство для начинающих по программированию баз данных Delphiв приведенных ниже примерах используются компоненты ADO (AdoQuery / AdoTable, подключенный к ADOConnection, DBGrid, подключенный к AdoQuery через DataSource) для отображения учет из таблицы базы данных в компоненте DBGrid.

Все имена компонентов были оставлены так, как Delphi назвала их при удалении в форме (DBGrid1, ADOQuery1, AdoTable1 и т. Д.).

Мышь перемещается над областью заголовка DBGrid

Во-первых, давайте посмотрим, как изменить указатель мыши, когда он перемещается по области заголовка DBGrid. Все, что вам нужно сделать, это добавить код в событие OnMouseMove для компонента DBGrid.

Приведенный ниже код просто использует свойство MouseCoord компонента DBGrid, чтобы «вычислить», где находится указатель мыши. Если он находится над областью заголовка DGBrid, pt.y равен 0, что является первой строкой в ​​DBGrid (область заголовка, отображающая заголовки столбцов / полей).

instagram viewer

процедура TForm1.DBGrid1MouseMove
(Отправитель: TObject; Shift: TShiftState; X, Y: целое число);
вар
pt: TGridcoord;
начать
pt: = DBGrid1.MouseCoord (x, y);
если pt.y = 0 тогда
DBGrid1.Cursor: = crHandPoint
еще
DBGrid1.Cursor: = crDefault;
конец;

Сортировка по столбцу Нажмите и измените шрифт заголовка столбца

Если вы используете подход ADO для разработки баз данных Delphi и хотите отсортировать записи в наборе данных, вам необходимо установить свойство Sort вашего AdoDataset (ADOQuery, AdoTable).

Свойство Sort - это значение самой широкой строки, указывающее часть «ORDER BY» стандартного запроса SQL. Конечно, вам не нужно писать SQL-запрос, чтобы иметь возможность использовать свойство Sort. Просто установите для свойства Sort имя отдельного поля или список полей через запятую, каждый из которых следует порядку сортировки.

Вот пример:

ADOTable1.Sort: = 'Год DESC, ArticleDate ASC'

Событие OnTitleClick компонента DBGrid имеет параметр Column, указывающий столбец, по которому щелкнул пользователь. Каждый столбец (объект типа Column) имеет свойство Field, указывающее поле (поле), представленное столбец и поле в его свойстве FieldName содержит имя поля в базовом набор данных.

Поэтому, чтобы отсортировать набор данных ADO по полю / столбцу, можно использовать простую строку:

с TCustomADODataSet (DBGrid1.DataSource. DataSet) сделать
Сортировка: = столбец. Поле. FieldName; // + 'ASC' или 'DESC'

Ниже приведен код даже обработчика OnTitleClick, который сортирует записи по щелчку столбца. Код, как всегда, расширяет идею.

Во-первых, мы хотим каким-то образом отметить столбец, который в настоящее время используется для сортировки. Затем, если мы щелкнем по заголовку столбца, и набор данных уже отсортирован по этому столбцу, мы хотим изменить порядок сортировки с ASC (по возрастанию) на DESC (по убыванию) и наоборот. Наконец, когда мы сортируем набор данных по другому столбцу, мы хотим удалить метку из ранее выбранного столбца.

Для простоты, чтобы пометить столбец, который «сортирует» записи, мы просто изменим стиль шрифта заголовка столбца на Bold и удалим его, когда набор данных сортируется с использованием другого столбца.

процедура TForm1.DBGrid1TitleClick (Column: TColumn);
{$ J +}Const PreviousColumnIndex: integer = -1;
{$ J-}
beginif DBGrid1.DataSource. DataSet является TCustomADODataSet thenwith TCustomADODataSet (DBGrid1.DataSource. DataSet) dobegintry
DBGrid1.Columns [PreviousColumnIndex] .title. Шрифт. Стиль: =
DBGrid1.Columns [PreviousColumnIndex] .title. Шрифт. Стиль - [fsBold];
exceptend;
Column.title. Шрифт. Стиль: =
Column.title. Шрифт. Стиль + [fsBold];
PreviousColumnIndex: = Column. Показатель;
если (Поз. (Колонка. Поле. FieldName, Sort) = 1)
и (Pos ('DESC', Sort) = 0) тогда
Сортировка: = столбец. Поле. FieldName + 'DESC'
еще
Сортировка: = столбец. Поле. FieldName + 'ASC';
конец;
конец;

Приведенный выше код использует типизированные константы сохранить значение ранее «выбранного» столбца для порядка сортировки.

instagram story viewer