Kuinka lajitella tietueita Delphi DBGrid -palvelussa sarakkeen mukaan

Delphi DBGrid on niin tehokas komponentti, että käytät sitä todennäköisesti päivittäin, jos kehität tietoihin perustuvia sovelluksia. Seuraavaksi tarkastelemme kuinka lisätä joitain muita ominaisuuksia tietokantaohjelmiin, joita käyttäjät ovat varmasti rakastaneet.

Noudattaen kohdassa Aloittelijoiden opas Delphi-tietokantaohjelmointiin, alla olevat esimerkit käyttävät ADO-komponentteja (AdoQuery / AdoTable kytkettynä ADOConnectioniin, DBGrid kytketty AdoQueryyn DataSourcen kautta) asiakirjat tietokantataulusta DBGrid-komponentissa.

Kaikki komponenttien nimet jätettiin, kun Delphi nimitti ne pudotettaessa lomakkeelle (DBGrid1, ADOQuery1, AdoTable1 jne.).

Hiiri siirtyy DBGrid-otsikkoalueen yli

Katsotaan ensin, kuinka hiiren osoitinta voi muuttaa, kun se liikkuu DBGrid-otsikkoalueen yli. Ainoa mitä sinun on tehtävä, on lisätä koodi DBGrid-komponentin OnMouseMove-tapahtumaan.

Alla oleva koodi yksinkertaisesti käyttää DBGrid-komponentin MouseCoord-ominaisuutta "laskea" hiiren osoittimen sijainti. Jos se on yli DGBrid-otsikkoalueen, pt.y on 0, mikä on DBGridin ensimmäinen rivi (otsikkoalue, joka näyttää sarakkeen / kentän otsikot).

instagram viewer

menettely TForm1.DBGrid1MouseMove
(Lähettäjä: TObject; Vaihto: TShiftState; X, Y: kokonaisluku);
var
pt: TGridcoord;
alkaa
pt: = DBGrid1.MouseCoord (x, y);
jos pt.y = 0 sitten
DBGrid1.Cursor: = crHandPoint
muu
DBGrid1.Cursor: = crDefault;
pää;

Lajittele sarakkeessa Napsauta ja muuta sarakkeen otsikon kirjasinta

Jos käytät ADO-lähestymistapaa Delphi-tietokannan kehittämiseen ja haluat lajitella tietueet tietojoukossa, sinun on määritettävä AdoDataset-sovelluksen Lajittelu-ominaisuus (ADOQuery, AdoTable).

Lajittelu-ominaisuus on laajakaistainen arvo, joka ilmaisee "ORDER BY" -osan tavallisessa SQL-kyselyssä. Tietysti sinun ei tarvitse kirjoittaa SQL-kyselyä voidaksesi käyttää Sort-ominaisuutta. Aseta Lajittelu-ominaisuus vain yksittäisen kentän nimeen tai pilkuilla erotettuun kenttäluetteloon, jokainen seuraa lajittelujärjestystä.

Tässä on esimerkki:

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

DBGrid-komponentin OnTitleClick-tapahtumassa on Sarake-parametri, joka ilmaisee sarakkeen, jota käyttäjä on napsauttanut. Jokaisella sarakkeella (tyyppi TColumn esine) on Kenttä-ominaisuus, joka ilmaisee kentän (TField), jota edustaa sarake ja kenttä sen KenttäNimi -ominaisuudessa sisältää kentän nimen alla olevassa kentässä aineisto.

Siksi ADO-tietojoukon lajitteluun kentän / sarakkeen perusteella voidaan käyttää yksinkertaista riviä:

TCustomADODataSet-sovelluksella (DBGrid1.DataSource. DataSet) tehdä
Lajittelu: = Sarake. Ala. Kenttä nimi; // + 'ASC' tai 'DESC'

Alla on parillisen OnTitleClick-käsittelijän koodi, joka lajittelee tietueet sarakkeen napsautuksella. Koodi, kuten aina, laajentaa ajatusta.

Ensinnäkin haluamme jollain tavalla merkitä sarakkeen, jota käytetään tällä hetkellä lajittelujärjestykseen. Seuraavaksi, jos napsautamme sarakkeen otsikkoa ja aineisto on jo lajiteltu kyseisen sarakkeen avulla, haluamme muuttaa lajittelujärjestyksen ASC: stä (nouseva) DESC: ksi (laskeva) ja päinvastoin. Lopuksi, kun lajittelemme tietojoukon toisella sarakkeella, haluamme poistaa merkinnän aiemmin valitusta sarakkeesta.

Yksinkertaisuuden vuoksi merkitsemään tietueita "lajittelevat" sarakkeet yksinkertaisesti muuttamalla sarakkeen otsikon kirjasintyylin lihavoituna ja poistamalla sen, kun aineisto lajitellaan toisella sarakkeella.

menettely TForm1.DBGrid1TitleClick (sarake: TColumn);
{$ J +}const PreviousColumnIndex: kokonaisluku = -1;
{$ J}
beginif DBGrid1.DataSource. DataSet On TCustomADODataSet thenwith TCustomADODataSet (DBGrid1.DataSource. aineisto) dobegintry
DBGrid1.Columns [PreviousColumnIndex] .title. Fontti. Tyyli: =
DBGrid1.Columns [PreviousColumnIndex] .title. Fontti. Tyyli - [fsBold];
exceptend;
Column.title. Fontti. Tyyli: =
Column.title. Fontti. Tyyli + [fsBold];
PreviousColumnIndex: = Sarake. Indeksi;
jos (Pos (sarake. Ala. KenttäNimi, Lajittelu) = 1)
ja (Pos ('DESC', Lajittelu) = 0) sitten
Lajittelu: = Sarake. Ala. KenttäNimi + 'DESC'
muu
Lajittelu: = Sarake. Ala. KenttäNimi + 'ASC';
pää;
pää;

Yllä oleva koodi käyttää kirjoitti vakioita säilyttääksesi aiemmin "valitun" sarakkeen arvon lajittelujärjestykseen.