Listă derulantă în interiorul unui DBGrid

Iată cum puteți plasa o listă drop-down într-un DBGrid. Creați interfețe de utilizator mai atractive pentru editarea câmpurilor de căutare în cadrul unei DBGrid - folosind proprietatea PickList a unei coloane DBGrid.

Acum, că știți ce sunt câmpurile de căutare și care sunt opțiunile de afișare a unui câmp de căutare în DelphiDBGrid, este timpul să vedeți cum să utilizați proprietatea PickList a unei coloane DGBrid pentru a permite utilizatorului să aleagă o valoare pentru un câmp de căutare dintr-o casetă listă derulantă.

O informație rapidă asupra proprietății Coloanelor DBGrid

A DBGrid controlul are o proprietate Columns - o colecție de obiecte TColumn reprezentând toate coloanele dintr-un control grilă. Coloanele pot fi setate la timpul de proiectare prin intermediul editorului Coloane sau programatic la timpul de execuție. De obicei, veți adăuga coloane la un DBGird când doriți să definiți cum apare o coloană, cum sunt afișate datele din coloană și pentru a accesa proprietățile, evenimentele și metodele TDBGridColumns la runtime. O grilă personalizată vă permite să configurați mai multe coloane pentru a prezenta vizualizări diferite ale aceluiași set de date (diferite ordine de coloane, diferite opțiuni de câmp și diferite culori și fonturi pentru coloane, pentru exemplu).

instagram viewer

Acum, fiecare Coloană dintr-o grilă este „legată” de un câmp dintr-un set de date afișat în grilă. Mai mult, fiecare coloană are o proprietate PickList. Proprietatea PickList listează valorile pe care utilizatorul le poate selecta pentru valoarea câmpului legat de coloană.

Completarea PickList-ului

Ce veți învăța aici este cum să completați lista de șiruri cu valori dintr-un alt set de date la timpul de rulare.
Reamintim, că edităm tabelul Articole și că un câmp subiect poate accepta doar valori din tabelul Subiecte: situația ideală pentru PickList!

Iată cum puteți configura proprietatea PickList. Mai întâi, adăugăm un apel la procedura SetupGridPickList din gestionarea de evenimente OnCreate a formularului.

procedură TForm1.FormCreate (Expeditor: TObject);
începe
SetupGridPickList ('Subiect', 'SELECTĂ NUMELE DIN Subiecți');
Sfârșit;

Cel mai simplu mod de a crea procedura SetupGridPickList este de a merge la partea privată a declarației de formular, adăugați declarația acolo și atingeți combinația de taste CTRL + SHIFT + C - completarea codului Delphi va face acest lucru odihnă:

...
tip
TForm1 = clasa (TForm)
...
privateprocedure SetupGridPickList (
const Numele domeniului: şir;
const sql: şir);
public
...

Notă: procedura SetupGridPickList are doi parametri. Primul parametru, FieldName, este numele câmpului pe care vrem să îl acționăm ca un câmp de căutare; al doilea parametru, SQL, este expresia SQL pe care o folosim pentru popularea PickList cu valori posibile - în general, expresia SQL ar trebui să returneze un set de date cu un singur câmp.

Iată cum arată SetupGridPickList:

procedură TForm1.SetupGridPickList (const Nume câmp, sql: şir);
var
slPickList: TStringList;
Solicitare: TADOQuery;
i: număr întreg;
începe
slPickList: = TStringList. Crea;
Interogare: = TADOQuery. Creați (sine);
încerca
Solicitare. Conexiune: = ADOConnection1;
Solicitare. SQL.Text: = sql;
Solicitare. Deschis;
// Completați lista de șiruriin timp cenu Solicitare. EOF dobegin
slPickList. Adăugați (interogare. Fields [0] .AsString);
Solicitare. Următor →;
Sfârșit; //while
// plasați lista în coloana corectăpentru i: = 0 la DBGrid1.Columns. Count-1 do
dacă DBGrid1.Columns [i] .FieldName = FieldName thenbegin
DBGrid1.Columns [i] .PickList: = slPickList;
Pauză;
Sfârșit;
in cele din urma
slPickList. Liber;
Solicitare. Liber;
Sfârșit;
Sfârșit; (* SetupGridPickList *)

Asta e. Acum, când faceți clic pe coloana Subiect (pentru a intra în modul de editare).

Notă 1: în mod implicit, lista derulantă afișează 7 valori. Puteți modifica lungimea acestei liste setând proprietatea DropDownRows.

Nota 2: nimic nu te împiedică să completezi PickList dintr-o listă de valori care nu provin dintr-o tabelă a bazei de date. Dacă, de exemplu, aveți un câmp care acceptă doar nume din zilele săptămânii („luni”,…, „duminică”) puteți construi o PickList „hard-coded”.

„Uh, trebuie să fac clic pe PickList de 4 ori ...”

Rețineți că atunci când doriți să editați câmpul care afișează o listă derulantă, va trebui să faceți clic pe celulă de 4 ori pentru a alege efectiv o valoare dintr-o listă. Următorul fragment de cod, adăugat la gestionatorul de evenimente OnCellClick de la DBGrid, imită o lovitură la tasta F2 urmată de Alt + DownArrow.

procedură TForm1.DBGrid1CellClick (Coloana: TColumn);
începe// Crearea listei de selectare derulantă apare mai rapiddacă Coloană. PickList. Numără> 0 thenbegin
keybd_event (VK_F2,0,0,0);
keybd_event (VK_F2,0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_MENU, 0,0,0);
keybd_event (VK_DOWN, 0,0,0);
keybd_event (VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_MENU, 0, KEYEVENTF_KEYUP, 0);
Sfârșit;
Sfârșit;