Postoje brojni načini i razlozi za prilagodbu rezultata a DBGrid u Delphi. Jedan od načina je dodavanje potvrdnih okvira kako bi rezultat bio vizualno atraktivniji.
Ako u vašem skupu podataka imate logično polje, DBGrid prikazuje ih kao "True" ili "False", ovisno o vrijednosti polja podataka. Međutim, izgleda mnogo bolje ako odlučite koristiti "istinsku" kontrolu za potvrdu da biste omogućili uređivanje polja.
Napravite uzorak aplikacije
Pokrenite novi obrazac u Delphiju i stavite TDBGrid, TADOTable i TADOConnection, TDataSource.
Ostavite sva imena komponenata onakva kakva jesu kada su prvi put ispuštena u obrazac (DBGrid1, ADOQuery1, AdoTable1, itd.). Pomoću Object Inspector postavite svojstvo ConnectionString komponente ADOConnection1 (TADOConnection) da ukažete na uzorak baze podataka MS QuickiesContest.mdb MS Access.
Spojite DBGrid1 na DataSource1, DataSource1 na ADOTable1 i na kraju ADOTable1 na ADOConnection1. Svojstvo ADOTable1 TableName treba upućivati na tablicu članaka (kako bi DBGrid prikazao zapise tablice članaka).
Ako ste pravilno postavili sva svojstva, kada pokrenete aplikaciju (s obzirom da je aktivno svojstvo komponente ADOTable1 Točno) trebali biste, prema zadanim postavkama, vidjeti DBGrid vrijednost logičkog polja kao „True“ ili „False“, ovisno o vrijednosti podataka polje.
CheckBox u DBGridu
Da bismo prikazali potvrdni okvir unutar ćelije DBGrid-a, trebat ćemo mu omogućiti dostupnost u vremenu izvođenja.
Odaberite "Kontrole podataka" na stranici Paleta komponenata i odaberite TDBCheckbox. Bacite ga bilo gdje na obrascu - nije važno gdje, jer će većinu vremena biti nevidljivo ili lebdjeti po mreži.
Savjet: TDBCheckBox je kontrola svjesna podataka koja omogućava korisniku da odabere ili poništi odabir jedne vrijednosti, što je prikladno za logička polja.
Zatim postavite svojstvo Visible na False. Promijenite svojstvo Boje DBCheckBox1 u istu boju kao DBGrid (tako da se stapa s DBGridom) i uklonite naslov.
Najvažnije je provjeriti je li DBCheckBox1 povezan s DataSource1 i ispravnim poljem.
Imajte na umu da se sve gore navedene vrijednosti svojstava DBCheckBox1 mogu postaviti u događaj OnCreate obrasca kao što je ovaj:
postupak TForm1.FormCreate (pošiljalac: TObject);
početi
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'Pobjednik';
DBCheckBox1.Visible: = Lažno;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// objašnjeno kasnije u članku
DBCheckBox1.ValueChecked: = 'Da Pobjednik!';
DBCheckBox1.ValueUnChecked: = 'Ne ovaj put.';
kraj;
Ono što slijedi je najzanimljiviji dio. Dok uređujemo logičko polje u DBGridu, moramo biti sigurni da je DBCheckBox1 postavljen iznad ("plutajuće") ćelije u DBGridu koji prikazuje logičko polje.
Za ostale (nefokusirane) ćelije koje nose boolova polja (u stupcu "Pobjednik") moramo pružiti grafički prikaz boolove vrijednosti (True / False). To znači da su vam potrebne najmanje dvije slike za crtanje: jedna za provjereno stanje (True vrijednost) i jedna za nekontrolirano stanje (False value).
Najlakši način da to postignete je pomoću funkcije Windows API DrawFrameControl za crtanje izravno na platnu DBGrid-a.
Evo koda u DBGridovu onDrawColumnCell rukovatelju događaja koji se događa kada mreža treba obojiti ćeliju.
postupak TForm1.DBGrid1DrawColumnCell (
Pošiljalac: TObject; const Rect: TRect; DataCol:
Integer; Stupac: TColumn; Stanje: TGridDrawState);
const IsChecked: red[Logička] od Integer =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK ili DFCS_CHECKED);
var
DrawState: Integer;
DrawRect: TRect;
beginif (gdFocused u Država) thenbeginif (Stupac. Polje. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.Left: = Rect. Lijevo + DBGrid1.Left + 2;
DBCheckBox1.Top: = Rect. Top + DBGrid1.top + 2;
DBCheckBox1.Width: = Rect. Desno - Rect. Lijevo;
DBCheckBox1.Height: = Rect. Dno - Rekt. Vrh;
DBCheckBox1.Visible: = Istina;
endendelsebeginif (Stupac. Polje. FieldName = DBCheckBox1.DataField) thenbegin
DrawRect: = pravokutnika;
InflateRect (DrawRect, -1, -1);
DrawState: = ISChecked [Stupac. Polje. AsBoolean];
DBGrid1.Canvas. FillRect (Rect);
DrawFrameControl (DBGrid1.Canvas. Handle, DrawRect,
DFC_BUTTON, DrawState);
kraj;
kraj;
kraj;
Za dovršetak ovog koraka moramo biti sigurni da je DBCheckBox1 nevidljiv kad napustimo ćeliju:
postupak TForm1.DBGrid1ColExit (Pošiljatelj: TObject);
beginif DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField zatim
DBCheckBox1.Visible: = Lažno
kraj;
Potrebna su nam još samo dva događaja.
Imajte na umu da kada u načinu uređivanja svi pritisci tipki idu u DBGrid ćeliju, moramo biti sigurni da su poslani u CheckBox. U slučaju CheckBoxa nas prije svega zanimaju [Tab] i [Space] tipka. [Tab] bi trebao pomaknuti fokus ulaza u sljedeću ćeliju, a [Space] prebaciti stanje na CheckBox.
postupak TForm1.DBGrid1KeyPress (Pošiljatelj: TObject; var Ključ: Char);
beginif (tipka = Chr (9)) zatim Izađi;
ako (DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, riječ (tipka), 0);
kraj;
kraj;
Može biti prikladno da se naslov za potvrdu promijeni kad korisnik provjeri ili poništite okvir. Imajte na umu da DBCheckBox ima dva svojstva (ValueChecked i ValueUnChecked) koja se koriste za specificiranje vrijednosti polja predstavljenog potvrdnim okvirom kada je označen ili nije označen.
Ovo svojstvo ValueChecked sadrži "Da, pobjednik!", A ValueUnChecked jednak je "Ne ovog puta."
postupak TForm1.DBCheckBox1Click (Pošiljatelj: TObject);
beginif DBCheckBox1.Checked zatim
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
drugo
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
kraj;
Pokrenite projekt i vidjet ćete potvrdne okvire na cijelom stupcu polja Winner.