Så här lägger du en rullgardinsmeny till en DBGrid. Skapa visuellt mer attraktiva användargränssnitt för att redigera uppslagningsfält i en DBGrid - med hjälp av egenskapen PickList i en DBGrid-kolumn.
Nu när du vet vad som är uppslagningsfält och vilka alternativ är att visa ett uppslagningsfält i Delphiär DBGrid, det är dags att se hur man använder egenskapen PickList i en DGBrid-kolumn för att göra det möjligt för en användare att välja ett värde för ett sökfält i en listruta.
En snabb information om DBGrid kolumner Egenskap
EN DBGrid kontrollen har en kolumnegenskap - en samling TColumnobjekt som representerar alla kolumnerna i ett rutnätkontroll. Kolumner kan ställas in vid designtid genom kolumnredigeraren eller programmatiskt vid körning. Du lägger vanligtvis till kolumner till en DBGird när du vill definiera hur en kolumn ska visas, hur informationen i kolumnen visas och åtkomst till egenskaperna, händelserna och metoderna för TDBGridColumner under körning. Med ett anpassat rutnät kan du konfigurera flera kolumner för att visa olika vyer av samma dataset (olika kolumnorder, olika fältval och olika kolumnfärger och typsnitt för exempel).
Nu är varje kolumn i ett rutnät "länkat" till ett fält från ett dataset som visas i rutnätet. Dessutom har varje kolumn en PickList-egenskap. Egenskapen PickList visar värden som användaren kan välja för kolumnens länkade fältvärde.
Fylla PickList
Vad du kommer att lära dig här är hur du fyller den stränglistan med värden från ett annat datasæt vid körning.
Kom ihåg att vi redigerar artikeltabellen och att ett ämnesfält bara kan acceptera värden från tabellen Ämnen: den perfekta situationen för PickList!
Så här ställer du in egenskapen PickList. Först lägger vi till ett samtal till SetupGridPickList-proceduren i formulärets OnCreate-händelsehanterare.
procedur TForm1.FormCreate (avsändare: TObject);
Börja
SetupGridPickList ('Ämne', 'VÄLJ Namn från ämnen');
slutet;
Det enklaste sättet att skapa SetupGridPickList-proceduren är att gå till den privata delen av formulärdeklarationen, lägg till deklarationen där och tryck på CTRL + SHIFT + C-tangentkombinationen - Delphis kodavslutning gör det resten:
...
typ
TForm1 = klass (TForm)
...
privateprocedure SetupGridPickList (
const Fält namn: sträng;
const sql: sträng);
offentlig
...
Obs: SetupGridPickList-proceduren tar två parametrar. Den första parametern, Fältnamn, är namnet på det fält vi vill agera som ett uppslagningsfält; den andra parametern, SQL, är SQL-uttrycket vi använder för att fylla PickList med möjliga värden - i allmänhet ska SQL-uttrycket returnera ett datasats med bara ett fält.
Så här ser SetupGridPickList ut:
procedur TForm1.SetupGridPickList (const Fältnamn, sql: sträng);
var
slPickList: TStringList;
Fråga: TADOQuery;
i: heltal;
Börja
slPickList: = TStringList. Skapa;
Fråga: = TADOQuery. Skapa (själv);
Prova
Fråga. Anslutning: = ADOConnection1;
Fråga. SQL.Text: = sql;
Fråga. Öppen;
// Fyll stränglistanmedaninte Fråga. EOF dobegin
slPickList. Lägg till (fråga. Fält [0] .AsString);
Fråga. Nästa;
slutet; //while
// placera listan i rätt kolumnför i: = 0 till DBGrid1.Columns. Count-1 do
om DBGrid1.Columner [i]. Fältnamn = Fältnamn thenbegin
DBGrid1.Columns [i] .PickList: = slPickList;
Ha sönder;
slutet;
till sist
slPickList. Fri;
Fråga. Fri;
slutet;
slutet; (* SetupGridPickList *)
Det är allt. När du klickar på ämneskolumnen (för att gå in i redigeringsläge).
Obs 1: som standard visar rullgardinsmenyn 7 värden. Du kan ändra längden på listan genom att ställa in egenskapen DropDownRows.
Obs 2: ingenting hindrar dig från att fylla i PickList från en lista över värden som inte kommer från en databastabell. Om du till exempel har ett fält som bara accepterar namnen på vardagar ('måndag',..., 'söndag') kan du bygga en "hårdkodad" PickList.
"Öh, jag måste klicka på PickList 4 gånger ..."
Observera att när du vill redigera fältet som visar en rullgardinslista måste du klicka på cellen fyra gånger för att faktiskt välja ett värde från en lista. Nästa kodavsnitt, som läggs till i DBGrids OnCellClick-händelsehanterare, efterliknar en hit till F2-tangenten följt av Alt + DownArrow.
procedur TForm1.DBGrid1CellClick (kolumn: TColumn);
Börja// Att göra rullgardinsmenyn snabbareom Kolumn. Plocklista. Räkna> 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);
slutet;
slutet;