Ir daudz veidu un iemeslu, lai pielāgotu a izvadi DBGrid iekšā Delfi. Viens veids ir pievienot izvēles rūtiņas, lai rezultāts būtu vizuāli pievilcīgāks.
Pēc noklusējuma, ja datu kopā ir Būla lauks, DBGrid parāda tos kā “True” vai “False” atkarībā no datu lauka vērtības. Tomēr tas izskatās daudz labāk, ja jūs izvēlaties izmantot izvēles rūtiņu “patiesa”, lai iespējotu lauku rediģēšanu.
Izveidojiet lietojumprogrammas paraugu
Sāciet jaunu formu Delphi un ievietojiet TDBGrid, TADOTable un TADOConnection, TDataSource.
Atstājiet visu sastāvdaļu nosaukumus tādus, kādi tie bija, kad tie pirmo reizi tika iemesti formā (DBGrid1, ADOQuery1, AdoTable1 utt.). Izmantojiet objekta inspektoru, lai iestatītu ADOConnection1 komponenta ConnectionString (TADOConnection) rekvizītu, lai norādītu uz QuickiesContest.mdb MS Access datu bāzes paraugu.
Savienojiet DBGrid1 ar DataSource1, DataSource1 ar ADOTable1 un, visbeidzot, ADOTable1 ar ADOConnection1. Īpašumam ADOTable1 TableName vajadzētu norādīt uz tabulu Raksti (lai DBGrid parādītu tabulas Raksti ierakstus).
Ja esat pareizi iestatījis visus rekvizītus, palaižot lietojumprogrammu (ņemot vērā, ka komponenta ADOTable1 aktīvais īpašums ir True) pēc noklusējuma jums vajadzētu redzēt DBGrid Būla lauka vērtību parādīt kā “True” vai “False” atkarībā no datu vērtības lauka.
Pārbaudes rūtiņa DBGrid
Lai parādītu izvēles rūtiņu DBGrid šūnā, mums tā jāpadara pieejama izpildes laikā.
Lapā atlasiet "Datu vadīklas" Komponentu palete un izvēlies a TDBCheckbox. Iemetiet to visur, kur atrodas veidlapa - vienalga, kur, jo lielākoties tā būs neredzama vai peld virs režģa.
Padoms: TDBCheckBox ir datu zinoša vadība, kas ļauj lietotājam atlasīt vai noņemt atlasi vienai vērtībai, kas ir piemērota Būla laukiem.
Pēc tam iestatiet sava redzamā rekvizītu uz False. Mainiet DBCheckBox1 rekvizītu Krāsu uz tādu pašu krāsu kā DBGrid (tātad tas saplūst ar DBGrid) un noņemiet parakstu.
Vissvarīgākais - pārliecinieties, vai DBCheckBox1 ir savienots ar DataSource1 un pareizo lauku.
Ņemiet vērā, ka visas iepriekš minētās DBCheckBox1 rekvizītu vērtības var iestatīt formas OnCreate notikumā šādi:
procedūra TForm1.FormCreate (Sūtītājs: TObject);
sākt
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'Uzvarētājs';
DBCheckBox1.Visible: = Nepatiess;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// paskaidrots vēlāk rakstā
DBCheckBox1.ValueChecked: = 'Jā uzvarētājs!';
DBCheckBox1.ValueUnChecked: = 'Ne šoreiz.';
beigas;
Kas notiks tālāk, ir visinteresantākā daļa. Rediģējot Būla lauku DBGrid, mums jāpārliecinās, vai DBCheckBox1 ir novietots virs ("peldošās") šūnas DBGrid, kas parāda Būla lauku.
Pārējām (nefokusētajām) šūnām, kas satur Būla laukus (kolonnā “Uzvarētājs”), mums ir jāsniedz daži Būla vērtības grafiski attēlojumi (True / False). Tas nozīmē, ka zīmēšanai nepieciešami vismaz divi attēli: viens pārbaudītajam stāvoklim (patiesa vērtība) un otrs nekontrolētam stāvoklim (nepatiesa vērtība).
Vienkāršākais veids, kā to izdarīt, ir izmantot Windows API funkciju DrawFrameControl, lai zīmētu tieši uz DBGrid audekla.
Šis ir kods DBGrid OnDrawColumnCell notikumu apstrādātājā, kas rodas, kad režģim ir jākrāso šūna.
procedūra TForm1.DBGrid1DrawColumnCell (
Sūtītājs: TObject; const Rect: TRect; DataCol:
Vesels skaitlis; Kolonna: TC kolonna; Štats: TGridDrawState);
const Ir pārbaudīts: masīvs[Būla] no Vesels skaitlis =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK vai DFCS_CHECKED);
var
DrawState: vesels skaitlis;
DrawRect: TRect;
iesākums (gdFocused iekšā Valsts) tadbeginifs (Sleja. Lauks. FieldName = DBCheckBox1.DataField) tad sāk
DBCheckBox1.Left: = Rect. Kreisais + DBGrid1.Left + 2;
DBCheckBox1.Top: = Rect. Augšā + DBGrid1.top + 2;
DBCheckBox1.Width: = Rect. Pa labi - rekt. Kreisais;
DBCheckBox1.Height: = Rect. Apakšā - rekt. Tops;
DBCheckBox1.Visible: = True;
endendelsebeginif (Sleja. Lauks. FieldName = DBCheckBox1.DataField) tad sāk
DrawRect: = Rect;
InflateRect (DrawRect, -1, -1);
DrawState: = Pārbaudīts [kolonna. Lauks. AsBoolean];
DBGrid1.Canvas. FillRect (Rect);
DrawFrameControl (DBGrid1.Canvas. Rokturis, DrawRect,
DFC_BUTTON, DrawState);
beigas;
beigas;
beigas;
Lai pabeigtu šo darbību, mums jāpārliecinās, vai DBCheckBox1 nav redzams, atstājot šūnu:
procedūra TForm1.DBGrid1ColExit (Sūtītājs: TObject);
iesākums DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField tad
DBCheckBox1.Visible: = Nepatiess
beigas;
Mums ir nepieciešami tikai vēl divi pasākumi.
Ņemiet vērā, ka rediģēšanas režīmā visi taustiņsitieni nonāk DBGrid šūnā, mums jāpārliecinās, vai tie tiek nosūtīti uz CheckBox. CheckBox gadījumā mūs galvenokārt interesē taustiņi [Tab] un [Space]. [Tab] būtu jāpārvieto ievades fokuss uz nākamo šūnu, un [Space] vajadzētu pārslēgt izvēles rūtiņas stāvokli.
procedūra TForm1.DBGrid1KeyPress (Sūtītājs: TObject; var Taustiņš: Char);
iesākums (taustiņš = Chr (9)) tad izejiet;
ja (DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField) tad sāk
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, word (Key), 0);
beigas;
beigas;
Varētu būt piemērots, lai izvēles rūtiņas Paraksts tiktu mainīts, lietotājam pārbaudot vai noņemot izvēles rūtiņu. Ņemiet vērā, ka DBCheckBox ir divas īpašības (ValueChecked un ValueUnChecked), kuras izmanto, lai norādītu lauka vērtību, kuru attēlo izvēles rūtiņa, kad tā ir atzīmēta vai nav atzīmēta.
Šim ValueChecked īpašumam ir “Jā, uzvarētājs!”, Un ValueUnChecked ir vienāds ar “Nav šoreiz”.
procedūra TForm1.DBCheckBox1Click (Sūtītājs: TObject);
iesākums DBCheckBox1.pārbaudīts tad
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
cits
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
beigas;
Palaidiet projektu, un laukā Uzvarētājs redzēsit izvēles rūtiņas.