Как да сортирате записи в Delphi DBGrid по заглавие на колоната

click fraud protection

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: цяло число);
Var
pt: TGridcoord;
започвам
pt: = DBGrid1.MouseCoord (x, y);
ако pt.y = 0 тогава
DBGrid1.Cursor: = crHandPoint
още
DBGrid1.Cursor: = crDefault;
край;

Сортиране върху щракване на колоната и промяна на шрифта на заглавието на колоната

Ако използвате ADO подхода за разработване на база данни на Delphi и искате да сортирате записите в набора от данни, трябва да зададете свойството Сортиране на вашия AdoDataset (ADOQuery, AdoTable).

Свойството Sort е най-широката стойност, показваща частта "ORDER BY" на стандартната SQL заявка. Разбира се, не е необходимо да пишете SQL заявка, за да можете да използвате свойството Sort. Просто задайте свойството Сортиране на името на едно поле или на списък, разделен със запетая, като всяко следва последователността на сортиране.

Ето пример:

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

Събитието OnTitleClick на компонента DBGrid има параметър Column, указващ колоната, на която потребителят е кликнал. Всяка колона (обект от тип TColumn) има свойство Field, обозначаващо полето (TField), представено от колоната и полето в свойството FieldName съдържа името на полето в основата набор от данни.

Следователно, за да сортирате набор от данни за ADO по поле / колона, може да се използва прост ред:

с TCustomADODataSet (DBGrid1.DataSource. DataSet) направете
Сортиране: = Колона. Field. Име на полето; // + „ASC“ или „DESC“

По-долу е кодът за манипулатора на OnTitleClick, който сортира записите по щракване в колоната. Кодът, както винаги, разширява идеята.

Първо, ние искаме по някакъв начин да маркираме колоната, която в момента се използва за подредба на сортиране. На следващо място, ако кликнем върху заглавието на колоната и наборът от данни вече е сортиран от тази колона, искаме да променим реда за сортиране от ASC (възходящ) на DESC (низходящ) и обратно. Накрая, когато сортираме набора от данни по друга колона, искаме да премахнем маркировката от предварително избраната колона.

За простота, за да маркираме колоната, която "сортира" записите, просто ще променим стила на шрифта на заглавието на колоната в Bold и ще го премахнем, когато базата данни се сортира с друга колона.

процедура TForm1.DBGrid1TitleClick (Колона: TColumn);
{$ J +}конст PreviousColumnIndex: integer = -1;
{$ J-}
beginif DBGrid1.DataSource. DataSet е TCustomADODataSet thenwith TCustomADODataSet (DBGrid1.DataSource. DataSet) dobegintry
DBGrid1.Columns [PreviousColumnIndex] .title. Font. Стил: =
DBGrid1.Columns [PreviousColumnIndex] .title. Font. Стил - [fsBold];
exceptend;
Column.title. Font. Стил: =
Column.title. Font. Style + [fsBold];
PreviousColumnIndex: = Колона. Индексът;
ако (Поз (колона) Field. Име на поле, сортиране) = 1)
и (Поз ('DESC', сортиране) = 0) тогава
Сортиране: = Колона. Field. FieldName + „DESC“
още
Сортиране: = Колона. Field. FieldName + 'ASC';
край;
край;

Горният код използва въведени константи за да запазите стойността на предварително избраната колона за подреждане.

instagram story viewer