Obstajajo številni načini in razlogi za prilagajanje rezultatov a DBGrid v Delphi. Eden od načinov je dodajanje potrditvenih polj, da bo rezultat bolj vizualno privlačen.
Če imate v naboru podatkov DBGrid privzeto, če imate logično polje jih prikaže kot "True" ali "False", odvisno od vrednosti podatkovnega polja. Vendar je videti veliko bolje, če se odločite za uporabo "pravega" potrditvenega polja, da omogočite urejanje polj.
Ustvari vzorčno aplikacijo
Zaženite nov obrazec v Delphiju in vstavite TDBGrid, TADOTable in TADOConnection, TDataSource.
Vsa imena komponent pustite takšna, kot so ob prvem spuščanju v obliko (DBGrid1, ADOQuery1, AdoTable1 itd.). S pomočjo Object Inspectorja nastavite lastnost ConnectionString komponente ADOConnection1 (TADOConnection) za prikaz vzorčne baze podatkov MS QuickiesContest.mdb MS Access.
Povežite DBGrid1 s DataSource1, DataSource1 v ADOTable1 in končno ADOTable1 v ADOConnection1. Lastnost ADOTable1 TableName mora kazati na tabelo Članki (da DBGrid prikaže zapise tabele Članki).
Če ste pravilno zagnali vse lastnosti, ko zaženete aplikacijo (glede na to, da je aktivna lastnost komponente ADOTable1 Res) bi morali privzeto videti, da DBGrid vrednost logičnega polja prikaže kot "True" ali "False", odvisno od vrednosti podatkov polje.
CheckBox v DBGrid
Če želite prikazati potrditveno polje v celici DBGrid, bomo morali to storiti za nas v času izvajanja.
Na strani "Nadzor podatkov" izberite Paleta komponent in izberite TDBCheckbox. Spustite ga kamor koli na obrazcu - ni pomembno kam, saj bo večino časa neviden ali lebdi čez mrežo.
Namig: TDBCheckBox je krmiljenje podatkov, ki uporabniku omogoča, da izbere ali prekliče izbiro ene same vrednosti, ki je primerna za logična polja.
Nato nastavite svojo vidno lastnost na napačno. Spremenite lastnost Color DBCheckBox1 v isto barvo kot DBGrid (torej se zlije z DBGrid) in odstranite napis.
Najpomembneje je, da se prepričate, da je DBCheckBox1 povezan s DataSource1 in s pravilnim poljem.
Upoštevajte, da lahko vse zgornje vrednosti lastnosti DBCheckBox1 nastavite v dogodku OnCreate obrazca, kot je ta:
postopek TForm1.FormCreate (Pošiljatelj: TObject);
začeti
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'Zmagovalec';
DBCheckBox1.Visible: = Lažno;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// razloženo kasneje v članku
DBCheckBox1.ValueChecked: = 'Da zmagovalec!';
DBCheckBox1.ValueUnChecked: = 'Ne tokrat.';
konec;
Sledi najbolj zanimiv del. Med urejanjem logičnega polja v DBGridu moramo zagotoviti, da je DBCheckBox1 nameščen nad ("plavajočo") celico v DBGridu, ki prikazuje logično polje.
Za preostale (nefokusirane) celice, ki nosijo logična polja (v stolpcu "Zmagovalec"), moramo navesti nekaj grafičnega prikaza boolove vrednosti (True / False). To pomeni, da za risanje potrebujete vsaj dve sliki: eno za preverjeno stanje (Resnična vrednost) in drugo za nenadzorovano stanje (Lažna vrednost).
Najlažji način za dosego tega je uporaba funkcije Windows API DrawFrameControl za risanje neposredno na platnu DBGrid.
Tu je koda v DBGridovem priročniku za prireditve OnDrawColumnCell, ki se pojavi, ko mora mreža pobarvati celico.
postopek TForm1.DBGrid1DrawColumnCell (
Pošiljatelj: TObject; const Rect: TRect; DataCol:
Integer; Stolpec: TColumn; Stanje: TGridDrawState);
konst Preverjeno: matrika[Logična] od Integer =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK ali DFCS_CHECKED);
var
DrawState: Integer;
DrawRect: TRect;
beginif (gdFocused v Država) potembeginif (Stolpec. Polje. FieldName = DBCheckBox1.DataField) potem začet
DBCheckBox1.Left: = Rect. Levo + DBGrid1.Left + 2;
DBCheckBox1.Top: = Rect. Na vrh + DBGrid1.top + 2;
DBCheckBox1.Width: = Rect. Pravica - Rect. Levo;
DBCheckBox1.Height: = Rect. Spodaj - Rekt. Vrh;
DBCheckBox1.Visible: = Res;
endendelsebeginif (Stolpec. Polje. FieldName = DBCheckBox1.DataField) potem začet
DrawRect: = Rect;
InflateRect (DrawRect, -1, -1);
DrawState: = ISChecked [Stolpec. Polje. AsBoolean];
DBGrid1.Canvas. FillRect (Rect);
DrawFrameControl (DBGrid1.Canvas. Ročaj, DrawRect,
DFC_BUTTON, DrawState);
konec;
konec;
konec;
Za zaključek tega koraka se moramo prepričati, da je DBCheckBox1 neviden, ko zapustimo celico:
postopek TForm1.DBGrid1ColExit (Pošiljatelj: TObject);
beginif DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField torej
DBCheckBox1.Visible: = Lažno
konec;
Potrebna sta samo še dva dogodka.
Ko v načinu urejanja vsi pritiski tipk gredo v celico DBGrid, moramo poskrbeti, da so poslani v CheckBox. V primeru CheckBoxa nas zanimata predvsem [Tab] in [Space] tipka. [Tab] bi moral premakniti vhodni fokus na naslednjo celico, [Space] pa preklopiti stanje CheckBox-a.
postopek TForm1.DBGrid1KeyPress (Pošiljatelj: TObject; var tipka: Char);
beginif (tipka = Chr (9)) nato Izhod;
če (DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField) potem začet
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, beseda (tipka), 0);
konec;
konec;
Primerno bi lahko, da se napis Caption (potrditev) spremeni, ko uporabnik preveri ali odstrani polje. Upoštevajte, da ima DBCheckBox dve lastnosti (ValueChecked in ValueUnChecked), ki se uporabljata za določanje vrednosti polja, ki jo predstavlja potrditveno polje, ko je ta potrjena ali odključena.
Ta lastnost ValueChecked ima »Da, zmagovalec!«, ValueUnChecked pa »Ne tokrat«.
postopek TForm1.DBCheckBox1Click (Pošiljatelj: TObject);
beginif DBCheckBox1.Checked torej
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
drugače
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
konec;
Zaženite projekt in v vseh stolpcih polja Winner boste videli potrditvena polja.