Rulleliste inde i en DBGrid

Sådan placeres en rulleliste i en DBGrid. Opret visuelt mere attraktive brugergrænseflader til redigering af opslagsfelter i en DBGrid - ved hjælp af egenskaben PickList i en DBGrid-kolonne.

Nu, at du ved, hvad der er opslagfelter, og hvad er mulighederne for at vise et opslagfelt i Delphi's DBGrid, er det tid til at se, hvordan man bruger egenskaben PickList i en DGBrid-søjle for at gøre det muligt for en bruger at vælge en værdi for et opslagfelt fra en rulleliste.

En hurtig info om DBGrid-kolonneregenskab

EN DBGrid kontrol har en kolonneegenskab - en samling af TColumnobjekter, der repræsenterer alle kolonnerne i et gitterkontrol. Kolonner kan indstilles på designtidspunktet gennem kolonnereditoren eller programmatisk under kørsel. Du tilføjer normalt Kolonner til en DBGird, når du vil definere, hvordan en kolonne vises, hvordan dataene i kolonnen vises, og for at få adgang til egenskaber, begivenheder og metoder til TDBGridColonner på runtime. Et tilpasset gitter giver dig mulighed for at konfigurere flere kolonner til at præsentere forskellige visninger af det samme datasæt (forskellige kolonneordrer, forskellige feltvalg og forskellige kolonnefarver og skrifttyper for eksempel).

instagram viewer

Nu er hver kolonne i et gitter "knyttet" til et felt fra et datasæt, der vises i gitteret. Derudover har hver kolonne en PickList-egenskab. Egenskaben PickList viser værdier, som brugeren kan vælge for kolonnens linkede feltværdi.

Påfyldning af PickList

Hvad du lærer her, er, hvordan du udfylder den strengliste med værdier fra et andet datasæt på kørselstidspunktet.
Husk, at vi redigerer oversigten over artikler, og at et emne-felt kun kan acceptere værdier fra emnetabellen: den ideelle situation for PickList!

Sådan konfigureres egenskaben PickList. Først tilføjer vi et opkald til SetupGridPickList-proceduren i formularens OnCreate-begivenhedshåndterer.

procedure TForm1.FormCreate (Afsender: TObject);
begynde
SetupGridPickList ('Emne', 'VÆLG Navn FRA emner');
ende;

Den nemmeste måde at oprette SetupGridPickList-proceduren er at gå til den private del af formularerklæringen, tilføj erklæringen der og tryk på CTRL + SKIFT + C-tastkombinationen - Delphis udførelse af kode gør det hvile:

...
type
TForm1 = klasse (TForm)
...
privateprocedure SetupGridPickList (
const Feltnavn: snor;
const sql: snor);
offentlig
...

Bemærk: SetupGridPickList-proceduren tager to parametre. Den første parameter, Feltnavn, er navnet på det felt, vi ønsker at fungere som et opslagfelt; den anden parameter, SQL, er det SQL-udtryk, vi bruger til at udfylde PickList med mulige værdier - generelt skal SQL-udtrykket returnere et datasæt med kun et felt.

Sådan ser SetupGridPickList ud:

procedure TForm1.SetupGridPickList (const Feltnavn, sql: snor);
Var
slPickList: TStringList;
Forespørgsel: TADOQuery;
i: heltal;
begynde
slPickList: = TStringList. Skab;
Forespørgsel: = TADOQuery. Opret (selv);
prøve
Forespørgsel. Forbindelse: = ADOCforbindelse1;
Forespørgsel. SQL.Text: = sql;
Forespørgsel. Åben;
// Udfyld strengelistenmensikke Forespørgsel. EOF dobegin
slPickList. Tilføj (Forespørgsel. Fields [0] .AsString);
Forespørgsel. Næste;
ende; //while
// placere listen i den rigtige kolonnetil i: = 0 til DBGrid1.Columns. Count-1 gøre
hvis DBGrid1.Kolonner [i]. Feltnavn = Feltnavn thenbegin
DBGrid1.Columns [i] .PickList: = slPickList;
Pause;
ende;
endelig
slPickList. Gratis;
Forespørgsel. Gratis;
ende;
ende; (* SetupGridPickList *)

Det er det. Når du nu klikker på kolonnen Emne (for at gå ind i redigeringsfunktion).

Bemærk 1: Som standard viser rullelisten 7 værdier. Du kan ændre længden på denne liste ved at indstille egenskaben DropDownRows.

Bemærk 2: intet forhindrer dig i at udfylde PickList fra en liste over værdier, der ikke kommer fra en databasetabel. Hvis du for eksempel har et felt, der kun accepterer ugedagsnavne ('Mandag',..., 'Søndag'), kan du opbygge en "hårdkodet" PickList.

"Øh, jeg skal klikke på PickList 4 gange ..."

Bemærk, at når du vil redigere det felt, der viser en rulleliste, skal du klikke på cellen 4 gange for faktisk at vælge en værdi fra en liste. Det næste kodestykker, føjet til DBGrid's OnCellClick-begivenhedshåndterer, efterligner et hit til F2-tasten efterfulgt af Alt + DownArrow.

procedure TForm1.DBGrid1CellClick (kolonne: TColumn);
begynde// At få rullemenuen til at vises hurtigerehvis Kolonne. Picklist. Tælling> 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);
ende;
ende;
instagram story viewer