A väljundi kohandamiseks on mitmeid viise ja põhjuseid DBGrid sisse Delphi. Üks võimalus on lisada ruudud, et tulemus oleks visuaalselt atraktiivsem.
Kui teie andmestikus on loogiline väli, siis vaikimisi DBGrid kuvab neid olenevalt andmevälja väärtusest väärtusega „tõene” või „vale”. Kuid see näeb palju parem välja, kui valite väljade redigeerimise lubamiseks ruutu "tõene" juhtelemendi.
Looge näidisrakendus
Alustage Delphis uut vormi ja pange sisse TDBGrid, TADOTable ja TADOConnection, TDataSource.
Jätke kõik komponentide nimed selliseks, nagu nad olid esmakordselt vormi laskmisel (DBGrid1, ADOQuery1, AdoTable1 jne). Kasutage objektiinspektorit, et seada komponendi ADOConnection1 (TADOConnection) omadus ConnectionString, et osutada näidisele QuickiesContest.mdb MS Access andmebaas.
Ühendage DBGrid1 DataSource1, DataSource1 ADOTable1 ja lõpuks ADOTable1 ADOConnection1. Atribuut ADOTable1 TableName peaks osutama tabelile Artiklid (et DBGrid näitaks tabeli artiklite kirjeid).
Kui olete kõik atribuudid õigesti seadnud, siis rakenduse käivitamisel (arvestades, et komponendi ADOTable1 aktiivne omadus on Tõsi) peaksite vaikimisi nägema DBGrid, olenevalt andmete väärtusest, loogilise välja väärtust vastavalt väärtusele "Õige" või "Vale" põld.
Kontrollboks DBGridis
Märkeruudu kuvamiseks DBGridi lahtris tuleb meil see käitamise ajal meile kättesaadavaks teha.
Valige lehel "Andmekontrollid" Komponentide palett ja vali a TDBCheckbox. Tilgutage vorm ükskõik kuhu - pole vahet, kuhu, kuna enamasti on see nähtamatu või hõljub üle võre.
Näpunäide: TDBCheckBox on andmete teadlik juhtelement, mis võimaldab kasutajal valida või tühistada ühe väärtuse, mis sobib loogiliste väljade jaoks.
Järgmisena määrake selle Visble atribuudiks False. Muutke DBCheckBox1 omadus Värv sama värviga, mis DBGrid (nii et see sulandub DBGridiga) ja eemaldage pealdis.
Mis kõige tähtsam - veenduge, et DBCheckBox1 on ühendatud DataSource1 ja õige väljaga.
Pange tähele, et kõiki ülaltoodud DBCheckBox1 omaduste väärtusi saab vormi OnCreate'i sündmuses seada järgmiselt:
protseduur TForm1.FormCreate (saatja: TObject);
alustada
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'Võitja';
DBCheckBox1.Visible: = Vale;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// selgitatud artiklis hiljem
DBCheckBox1.ValueChecked: = 'Jah, võitja!';
DBCheckBox1.ValueUnChecked: = 'Seekord mitte.';
lõpp;
Mis edasi saab, on kõige huvitavam osa. Boolean välja redigeerimisel DBGridis peame veenduma, et DBCheckBox1 on paigutatud loogilist välja kuvava DBGridi lahtri kohale ("hõljuvaks").
Ülejäänud (fookuseta) lahtrite, mis kannavad tõeväärtusvälju (veerus "Võitja"), jaoks peame esitama tõeväärtuse graafilise kujutise (True / False). See tähendab, et teil on joonistamiseks vaja vähemalt kahte pilti: üks kontrollitud oleku jaoks (True value) ja üks kontrollimata oleku jaoks (False value).
Lihtsaim viis selle saavutamiseks on kasutada Windows API DrawFrameControl funktsiooni, et joonistada otse DBGridi lõuendile.
Siin on DBGridi sündmuste käitleja OnDrawColumnCell kood, mis ilmneb siis, kui ruudustik peab lahtri värvima.
protseduur TForm1.DBGrid1DrawColumnCell (
Saatja: TObject; const Rect: TRect; DataCol:
Täisarv; Veerg: TCveerg; Osariik: TGridDrawState);
const On kontrollitud: massiiv[Loogiline] kohta Täisarv =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK või DFCS_CHECKED);
var
DrawState: täisarv;
DrawRect: TRect;
algav (gdFocused sisse Osariik) siisbeginif (Veerg. Väli. FieldName = DBCheckBox1.DataField) siis alustatakse
DBCheckBox1.Left: = Rekt. Vasak + DBGrid1.Left + 2;
DBCheckBox1.Top: = Rekt. Üles + DBGrid1.top + 2;
DBCheckBox1.Width: = Rekt. Õige - rekt. Vasak;
DBCheckBox1.Height: = Rekt. Põhi - rekt. Ülaosa;
DBCheckBox1.Visible: = True;
endendelsebeginif (Veerg. Väli. FieldName = DBCheckBox1.DataField) siis alustatakse
DrawRect: = Rekt;
InflateRect (DrawRect, -1, -1);
DrawState: = ISChecked [veerg. Väli. AsBoolean];
DBGrid1.Canvas. FillRect (rekt);
DrawFrameControl (DBGrid1.Canvas. Käepide, DrawRect,
DFC_BUTTON, DrawState);
lõpp;
lõpp;
lõpp;
Selle sammu lõpetamiseks peame veenduma, et DBCheckBox1 on lahtrist lahkudes nähtamatu:
protseduur TForm1.DBGrid1ColExit (saatja: TObject);
algav DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField siis
DBCheckBox1.Visible: = Vale
lõpp;
Me vajame veel kahte sündmust.
Pange tähele, et redigeerimisrežiimis suunatakse kõik klahvivajutused DBGridi lahtrisse, peame kontrollima, kas need saadetakse kontrollboksi. Kontrollkasti puhul huvitavad meid peamiselt klahvid [Tab] ja [Tühik]. [Tab] peaks sisendfookuse teisaldama järgmisse lahtrisse ja [Tühik] peaks vahetama ruutu olekut.
protseduur TForm1.DBGrid1KeyPress (saatja: TObject; var võti: Char);
algav (võti = Chr (9)) siis Exit;
kui (DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField) siis alustatakse
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, sõna (võti), 0);
lõpp;
lõpp;
Võib olla kohane, kui märkeruut Caption muutub, kui kasutaja selle kasti kontrollib või selle tühistab. Pange tähele, et DBCheckBoxil on kaks omadust (ValueChecked ja ValueUnChecked), mida kasutatakse välja väärtuse määramiseks, mida ruut tähistab, kui see on kontrollitud või märkimata.
Selles ValueCheckeri atribuudis on väärtus „Jah, võitja!” Ja ValueUnChecked võrdub väärtusega „Pole seekord”.
protseduur TForm1.DBCheckBox1Click (saatja: TObject);
algav DBCheckBox1.Kontrollitud siis
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
muud
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
lõpp;
Käivitage projekt ja näete märkeruute kogu välja Võitja väljal.