A jelölőnégyzet behelyezése a DBGridbe

Számos módszer és ok van a. Kimenetének testreszabására DBGrid ban ben Delphi. Az egyik módszer a jelölőnégyzetek hozzáadása, hogy az eredmény vizuálisan vonzóbb legyen.

Alapértelmezés szerint, ha van egy logikai mező az adatkészletben, a DBGrid megjeleníti őket "igaz" vagy "hamis" értékként, az adatmező értékétől függően. Sokkal jobban néz ki, ha úgy dönt, hogy "igaz" jelölőnégyzetet használ a mezők szerkesztésének engedélyezéséhez.

Hozzon létre egy mintaalkalmazást

Indítson el egy új űrlapot a Delphiből, és helyezze el a TDBGrid, a TADOTable és a TADOConnection, TDataSource fájlt.

Hagyja az összes alkotóelem nevét olyan formában, ahogyan először dobták az űrlapba (DBGrid1, ADOQuery1, AdoTable1 stb.). Az Object Inspector segítségével állítsa be az ADOConnection1 összetevő ConnectionString tulajdonságát (TADOConnection), hogy a QuickiesContest.mdb MS Access adatbázisra mutatjon.

Csatlakoztassa a DBGrid1-t az DataSource1-hez, a DataSource1-t az ADOTable1-hez, végül az ADOTable1-et az ADOConnection1-hez. Az ADOTable1 TableName tulajdonságnak a Cikkek táblára kell mutatnia (hogy a DBGrid megjelenítse a Cikkek táblázat rekordjait).

instagram viewer

Ha az összes tulajdonságot helyesen állította be, az alkalmazás futtatásakor (tekintve, hogy az ADOTable1 összetevő aktív tulajdonsága a Igaz), alapértelmezés szerint a DBGridnek a logikai mező értékét "igaz" vagy "hamis" értékként kell megjelenítenie, az adatok értékétől függően terület.

CheckBox egy DBGrid-ben

A jelölőnégyzet megjelenítéséhez a DBGrid cellájában belül azt elérhetővé kell tennünk számunkra futási időben.

Válassza az "Adatvezérlők" oldalt a Alkatrész paletta és válasszon egy TDBCheckbox. Dobjon el egyet bárhová az űrlapon - nem számít, hol, mivel az idő nagy része láthatatlan vagy a rács felett lebeg.

Tipp: A TDBCheckBox egy olyan adattudatos vezérlő, amely lehetővé teszi a felhasználó számára, hogy egyetlen értéket válasszon ki, vagy törölje azt, amely megfelelő a logikai mezőkhöz.

Ezután állítsa a Látható tulajdonságot Hamis értékre. Cserélje a DBCheckBox1 Szín tulajdonságát ugyanolyan színűre, mint a DBGrid (így beleolvad a DBGridbe), és távolítsa el a képaláírást.

A legfontosabb, hogy ellenőrizze, hogy a DBCheckBox1 csatlakozik-e a DataSource1-hez és a helyes mezőhöz.

Vegye figyelembe, hogy a fenti DBCheckBox1 tulajdonságértékek az űrlap OnCreate eseményében állíthatók be, például:

eljárás TForm1.FormCreate (küldő: TObject);
kezdődik
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'Győztes';
DBCheckBox1.Visible: = Hamis;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// a cikk késõbbi magyarázata
DBCheckBox1.ValueChecked: = 'Igen egy győztes!';
DBCheckBox1.ValueUnChecked: = 'Most nem.';
vég;

A következő legérdekesebb része lesz. A boolean mező szerkesztése közben a DBGrid-ben ellenőriznünk kell, hogy a DBCheckBox1 a logikai mezőt megjelenítő DBGrid cella fölött ("lebegő") legyen-e ("lebegő").

A logikai mezőket hordozó (nem fókuszált) cellák többi részére (a "Győztes" oszlopban) be kell mutatnunk a logikai érték grafikus ábrázolását (True / False). Ez azt jelenti, hogy legalább két képre van szüksége a rajzhoz: az egyik az ellenőrzött állapothoz (igaz érték) és egy a nem ellenőrzött állapothoz (hamis érték).

Ennek legegyszerűbb módja a Windows API DrawFrameControl funkció használata a DBGrid vászonjára való közvetlen rajzoláshoz.

Íme a DBGrid OnDrawColumnCell eseménykezelőjében szereplő kód, amely akkor fordul elő, amikor a rácsnak cellát kell festenie.

eljárás TForm1.DBGrid1DrawColumnCell (
Feladó: TObject; const Rect: TRect; DataCol:
Egész szám; Oszlop: TC oszlop; Állam: TGridDrawState);
const IsChecked: sor[Boole] nak,-nek Egész szám =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK vagy DFCS_CHECKED);
var
DrawState: egész szám;
DrawRect: TRect;
beginif (gdFocused ban ben Állapot) thenbeginif (Oszlop. Terület. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.Left: = Rekt. Bal + DBGrid1.Left + 2;
DBCheckBox1.Top: = Rekt. Top + DBGrid1.top + 2;
DBCheckBox1.Width: = Rect. Jobbra - Rect. Bal;
DBCheckBox1.Height: = Rekt. Alul - Rect. Top;
DBCheckBox1.Visible: = Igaz;
endendelsebeginif (Oszlop. Terület. FieldName = DBCheckBox1.DataField) thenbegin
DrawRect: = téglalap;
InflateRect (DrawRect, -1, -1);
DrawState: = ISChecked [Oszlop. Terület. AsBoolean];
DBGrid1.Canvas. FillRect (Rect);
DrawFrameControl (DBGrid1.Canvas. Fogantyú, DrawRect,
DFC_BUTTON, DrawState);
vég;
vég;
vég;

A lépés befejezéséhez meg kell győződnie arról, hogy a DBCheckBox1 láthatatlan-e, amikor elhagyjuk a cellát:

eljárás TForm1.DBGrid1ColExit (Feladó: TObject);
beginif DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField azután
DBCheckBox1.Visible: = Hamis
vég;

Csak két további eseményre van szükségünk a kezeléshez.

Ne feledje, hogy szerkesztési módban az összes billentyűleütés a DBGrid cellájába kerül, ellenőriznünk kell, hogy azokat a CheckBoxba küldték-e. A CheckBox esetében elsősorban a [Tab] és a [Space] gomb érdekli. A [Tab] -nak a bemeneti fókuszt a következő cellába kell mozgatnia, és a [Space] -nek váltania kell a CheckBox állapotát.

eljárás TForm1.DBGrid1KeyPress (Feladó: TObject; var Kulcs: Char);
beginif (kulcs = Chr (9)) majd kilép;
ha (DBGrid1.SelectedField. FieldName = DBCheckBox1.DataField) thenbegin
DBCheckBox1.SetFocus;
SendMessage (DBCheckBox1.Handle, WM_Char, word (Key), 0);
vég;
vég;

Helyénvaló lehet, hogy a Jelölés bejelölése jelölõnégyzet megváltozik, amikor a felhasználó bejelöli vagy törli a négyzetet. Ne feledje, hogy a DBCheckBox két tulajdonsággal rendelkezik (ValueChecked és ValueUnChecked), amelyek a jelölőnégyzet által képviselt mezőérték meghatározásához használják, amikor az be van jelölve vagy nincs bejelölve.

Ez a ValueChecked tulajdonság „Igen, egy győztes!”, És a ValueUnChecked értéke „Nem ezúttal”.

eljárás TForm1.DBCheckBox1Click (Feladó: TObject);
beginif DBCheckBox1.Checked azután
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
más
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
végén;

Futtassa a projektet, és a Győztes mező oszlopában látja a jelölőnégyzeteket.