Kako sortirati zapise u Delphi DBGridu prema naslovu stupca

Delphi DBGrid je tako moćna komponenta da ga vjerojatno svakodnevno upotrebljavate ako razvijate aplikacije svjesne podataka. U nastavku ćemo pogledati kako dodati još nekih značajki aplikacijama baze podataka koje će vaši korisnici zasigurno voljeti.

Slijedeći koncepte opisane u Vodič za početnike za programiranje Delphi baze podataka, donji primjeri koriste ADO komponente (AdoQuery / AdoTable spojen na ADOConnection, DBGrid spojen na AdoQuery preko DataSource) za prikaz zaslona ploče iz tablice baze podataka u DBGrid komponenti.

Sva imena komponenata ostala su onako kako ih je Delphi imenovao kada su ispušteni na obrascu (DBGrid1, ADOQuery1, AdoTable1, itd.).

Pomicanje miša po DBGrid naslovnom području

Prvo, pogledajmo kako promijeniti pokazivač miša dok se kreće po DBGrid naslovnom području. Sve što trebate učiniti je dodati kôd događaju OnMouseMove za DBGrid komponentu.

Donji kod jednostavno koristi svojstvo MouseCoord DBGrid komponente da "izračuna" gdje je pokazivač miša. Ako je iznad naslovnog područja DGBrid, pt.y je jednako 0, što je prvi red u DBGridu (naslovno područje koje prikazuje naslove stupaca / polja).

instagram viewer

postupak TForm1.DBGrid1MouseMove
(Pošiljatelj: TObject; Shift: TShiftState; X, Y: Integer);
var
pt: TGridcoord;
početi
pt: = DBGrid1.MouseCoord (x, y);
ako pt.y = 0 zatim
DBGrid1.Cursor: = crHandPoint
drugo
DBGrid1.Cursor: = crDefault;
kraj;

Poredajte na kliknite Stupac i promijenite font naslova stupca

Ako koristite ADO pristup razvoju Delphi baze podataka i želite sortirati zapise u skupu podataka, morate postaviti svojstvo Sort vašeg AdoDataset (ADOQuery, AdoTable).

Svojstvo Sort je vrijednost najšireg niza što ukazuje na "ORDER BY" dio standardnog SQL upita. Naravno, ne morate pisati SQL upit da biste mogli koristiti svojstvo Sortiranje. Jednostavno postavite svojstvo Sortiranje na ime jednog polja ili na popis polja odvojenih zarezima, a svaki slijedi redoslijed sortiranja.

Evo primjera:

ADOTable1.Sort: = 'Godina DESC, ArticleDate ASC'

Događaj OnTitleClick DBGrid komponente ima parametar Stupac koji označava Stupac na koji je korisnik kliknuo. Svaki stupac (objekt vrste TColumn) ima svojstvo polja koje ukazuje na polje (TField) predstavljeno sa Stupac, a polje u svojstvu FieldName sadrži ime polja u podlozi skup podataka.

Zbog toga se za sortiranje ADO skupa podataka po polju / stupcu može koristiti jednostavan redak:

s TCustomADODataSet (DBGrid1.DataSource. DataSet) učiniti
Poredaj: = Stupac. Polje. Naziv polja; // + 'ASC' ili 'DESC'

Ispod je kôd za OnTitleClick čak i alat za upravljanje koji sortira zapise po kliku stupca. Kôd, kao i uvijek, proširuje ideju.

Prvo želimo na neki način označiti stupac koji se trenutno koristi za redoslijed sortiranja. Zatim, ako kliknemo na naslov stupca, a skup podataka je već sortiran po tom stupcu, želimo promijeniti redoslijed sortiranja iz ASC (uzlazno) u DESC (silazno) i obrnuto. Konačno, kada sortiramo skup podataka prema drugom stupcu, želimo ukloniti oznaku iz prethodno odabranog stupca.

Radi jednostavnosti, kako bismo označili stupac koji "sortira" zapise, jednostavno ćemo promijeniti stil fonta naslova stupca u Bold i ukloniti ga kada se skup podataka sortira pomoću drugog stupca.

postupak TForm1.DBGrid1TitleClick (Stupac: TColumn);
{$ J +}const PrethodniColumnIndex: cijeli broj = -1;
{$} J-
beginif DBGrid1.DataSource. DataSet je TCustomADODataSet thenwith TCustomADODataSet (DBGrid1.DataSource. naziv) dobegintry
DBGrid1.Columns [PreviousColumnIndex] .title. Font. Stil: =
DBGrid1.Columns [PreviousColumnIndex] .title. Font. Stil - [fsBold];
exceptend;
Column.title. Font. Stil: =
Column.title. Font. Stil + [fsBold];
PrethodniColumnIndex: = Stupac. Indeks;
ako (Pos (stupac). Polje. Ime polja, sortiranje) = 1)
i (Pos ('DESC', sortiraj) = 0) zatim
Poredaj: = Stupac. Polje. FieldName + 'DESC'
drugo
Poredaj: = Stupac. Polje. FieldName + 'ASC';
kraj;
kraj;

Gornji kod koristi tipkane konstante da biste sačuvali vrijednost prethodno "odabranog" stupca za redoslijed sortiranja.

instagram story viewer