Delphi DBGrid er en så stærk komponent, at du sandsynligvis bruger den hver dag, hvis du udvikler datavidstærke applikationer. Nedenfor ser vi på, hvordan du tilføjer nogle flere funktioner til dine databaseapplikationer, som dine brugere helt sikkert vil elske.
Følger de begreber, der er beskrevet i Begyndervejledning til Delphi-databaseprogrammering, eksemplerne nedenfor bruger ADO-komponenter (AdoQuery / AdoTable tilsluttet ADOConnection, DBGrid forbundet til AdoQuery via DataSource) til at vise optegnelser fra en databasetabel i en DBGrid-komponent.
Alle komponentnavne blev efterladt, som Delphi navngav dem, når de faldt på formularen (DBGrid1, ADOQuery1, AdoTable1 osv.).
Mus bevæger sig over DBGrid-titelområdet
Lad os først se, hvordan du ændrer musemarkøren, mens den bevæger sig over DBGrid-titelområdet. Alt hvad du skal gøre er at tilføje koden til OnMouseMove-hændelsen til DBGrid-komponenten.
Koden herunder bruger simpelthen MouseCoord-egenskaben i DBGrid-komponenten til at "beregne" hvor musemarkøren er. Hvis det er over DGBrid-titelområdet, er pt.y lig med 0, som er den første række i DBGrid (titelområdet, der viser kolonne / feltitler).
procedure TForm1.DBGrid1MouseMove
(Afsender: TObject; Skift: TShiftState; X, Y: heltal);
Var
pt: TGridcoord;
begynde
pt: = DBGrid1.MouseCoord (x, y);
hvis pt.y = 0 derefter
DBGrid1.Cursor: = crHandPoint
andet
DBGrid1.Cursor: = crDefault;
ende;
Sorter på kolonne Klik og skift kolonnetitelfont
Hvis du bruger ADO-metoden til Delphi-databaseudvikling og vil sortere posterne i datasættet, skal du indstille egenskaben Sortér for dit AdoDataset (ADOQuery, AdoTable).
Egenskaben Sorter er den bredeste værdi, der angiver "ORDER BY" -delen af standard SQL-forespørgslen. Selvfølgelig behøver du ikke at skrive SQL-forespørgslen for at kunne bruge egenskaben Sorter. Sæt blot egenskaben Sorter til navnet på et enkelt felt eller til en kommasepareret liste over felter, der hver følger sorteringsrækkefølgen.
Her er et eksempel:
ADOTable1.Sort: = 'År DESC, ArticleDate ASC'
DBT-komponentens OnTitleClick-hændelse har en kolonneparameter, der angiver den kolonne, som brugeren har klikket på. Hver kolonne (objekt af type TColumn) har en feltegenskab, der angiver det felt (TField), der er repræsenteret af kolonnen og feltet i dens feltnavn-egenskab indeholder navnet på feltet i det underliggende datasæt.
Derfor kan en simpel linje bruges til at sortere et ADO-datasæt efter felt / kolonne:
med TCustomADODataSet (DBGrid1.DataSource. DataSet) gør
Sorter: = Kolonne. Mark. Feltnavn; // + 'ASC' eller 'DESC'
Nedenfor er koden for den OnTitleClick selv-handler, der sorterer posterne ved kolonneklik. Koden udvider som altid idéen.
Først vil vi på en eller anden måde markere den kolonne, der i øjeblikket bruges til sorteringsrækkefølge. Dernæst, hvis vi klikker på en kolonnetitel, og datasættet allerede er sorteret efter den kolonne, vil vi ændre sorteringsrækkefølgen fra ASC (stigende) til DESC (faldende), og vice versa. Endelig, når vi sorterer datasættet efter en anden kolonne, vil vi fjerne mærket fra den tidligere valgte kolonne.
For at gøre det lettere at markere den kolonne, der "sorterer" posterne, ændrer vi simpelthen skrifttypen for kolonnetitlen til Fed og fjerner den, når datasættet sorteres ved hjælp af en anden kolonne.
procedure TForm1.DBGrid1TitleClick (kolonne: TColumn);
{$ J +}const ForrigeColumnIndex: heltal = -1;
{$ J-}
beginif DBGrid1.DataSource. DataSet er TCustomADODataSet thenwith TCustomADODataSet (DBGrid1.DataSource. DataSet) dobegintry
DBGrid1.Columns [PreviousColumnIndex] .title. Font. Style: =
DBGrid1.Columns [PreviousColumnIndex] .title. Font. Style - [fsFet];
exceptend;
Column.title. Font. Style: =
Column.title. Font. Style + [fsFet];
PreviousColumnIndex: = Kolonne. Indeks;
hvis (Pos (kolonne. Mark. Feltnavn, sortering = 1)
og (Pos ('DESC', Sort) = 0) derefter
Sorter: = Kolonne. Mark. Feltnavn + 'DESC'
andet
Sorter: = Kolonne. Mark. Feltnavn + 'ASC';
ende;
ende;
Ovenstående kode bruger indtastede konstanter for at bevare værdien af den tidligere "valgte" kolonne til sorteringsrækkefølge.