Hier leest u hoe u een vervolgkeuzelijst in een DBGrid plaatst. Maak visueel aantrekkelijkere gebruikersinterfaces voor het bewerken van opzoekvelden in een DBGrid - met behulp van de eigenschap PickList van een DBGrid-kolom.
Nu je weet wat opzoekvelden zijn en wat de opties zijn om een opzoekveld in DBGrid van Delphi weer te geven, is het tijd om te zien hoe de eigenschap PickList van een DGBrid-kolom kan worden gebruikt om een gebruiker een waarde voor een opzoekveld te laten kiezen uit een vervolgkeuzelijst.
Een DBGrid-besturingselement heeft de eigenschap Kolommen - een verzameling TColumn-objecten die alle kolommen in een rasterbesturingselement vertegenwoordigen. Kolommen kunnen tijdens het ontwerp worden ingesteld via de Kolom-editor of programmatisch tijdens runtime. Gewoonlijk voegt u Kolommen toe aan een DBGird wanneer u wilt definiëren hoe een kolom wordt weergegeven, hoe de gegevens in de kolom worden weergegeven en om toegang te krijgen tot de eigenschappen, gebeurtenissen en methoden van TDBGridColumns tijdens runtime. Met een aangepast raster kunt u meerdere kolommen configureren om verschillende weergaven van dezelfde gegevensset weer te geven (verschillende kolomvolgorden, verschillende veldkeuzes en verschillende kolomkleuren en lettertypen bijvoorbeeld).
Nu is elke kolom in een raster "gekoppeld" aan een veld uit een gegevensset die in het raster wordt weergegeven. Bovendien heeft elke kolom de eigenschap PickList. De eigenschap PickList geeft waarden weer die de gebruiker kan selecteren voor de gekoppelde veldwaarde van de kolom.
Wat u hier zult leren, is hoe u die Stringlijst tijdens de uitvoering kunt vullen met waarden uit een andere gegevensset.
Bedenk dat we de tabel Artikelen bewerken en dat een veld Onderwerp alleen waarden uit de tabel Onderwerpen kan accepteren: de ideale situatie voor de PickList!
Ga als volgt te werk om de eigenschap PickList in te stellen. Eerst voegen we een aanroep toe aan de procedure SetupGridPickList in de OnCreate-gebeurtenishandler van het formulier.
procedure TForm1.FormCreate (Sender: TObject);
beginnen
SetupGridPickList ('Onderwerp', 'SELECT Naam UIT Onderwerpen');
einde;
De eenvoudigste manier om de SetupGridPickList-procedure te maken, is door naar het privégedeelte van de formulieraangifte te gaan, de verklaring daar toe te voegen en op de toetsencombinatie CTRL + SHIFT + C te drukken - Delphi's code doet de rest:
...
type
TForm1 = class (TForm)
...
privateprocedure SetupGridPickList (
const Veldnaam : draad;
const sql: draad);
openbaar
...
Opmerking: de procedure SetupGridPickList heeft twee parameters. De eerste parameter, FieldName, is de naam van het veld dat we willen gebruiken als een opzoekveld; de tweede parameter, SQL, is de SQL-expressie die we gebruiken om de PickList te vullen met mogelijke waarden - in het algemeen moet de SQL-expressie een gegevensset met slechts één veld retourneren.
Zo ziet de SetupGridPickList eruit:
procedure TForm1.SetupGridPickList (const Veldnaam, sql: draad);
var
slPickList: TStringList;
Zoekopdracht: TADOQuery;
i: geheel getal;
beginnen
slPickList: = TStringList.Create;
Zoekopdracht: = TADOQuery.Create (zelf);
proberen
Query.Connection: = ADOConnection1;
Query.SQL.Text: = sql;
Query.Open;
// Vul de stringlijst interwijl niet Query.EOF dobegin
slPickList.Add (Query.Fields [0] .AsString);
Query.Next;
einde; //terwijl
// plaats de lijst in de juiste kolomvoor i: = 0 naar DBGrid1.Columns.Count-1 Doen
als DBGrid1.Columns [i] .FieldName = FieldName thenbegin
DBGrid1.Columns [i] .PickList: = slPickList;
Breken;
einde;
Tenslotte
slPickList.Free;
Query.Free;
einde;
einde; (* SetupGridPickList *)
Dat is het. Wanneer u nu op de kolom Onderwerp klikt (om de bewerkingsmodus te openen).
Opmerking 1: standaard worden in de vervolgkeuzelijst 7 waarden weergegeven. Je kunt de lengte van deze lijst wijzigen door de eigenschap DropDownRows in te stellen.
Opmerking 2: niets weerhoudt u ervan om de PickList op te vullen uit een lijst met waarden die niet uit een databasetabel komen. Als u bijvoorbeeld een veld hebt dat alleen weekdagnamen accepteert ('maandag', ..., 'zondag'), kunt u een "hard-coded" picklijst maken.
"Uh, ik moet 4 keer op de PickList klikken ..."
Houd er rekening mee dat als u het veld met een vervolgkeuzelijst wilt bewerken, u vier keer op de cel moet klikken om daadwerkelijk een waarde uit een lijst te kiezen. Het volgende codefragment, toegevoegd aan de OnCellClick-gebeurtenishandler van DBGrid, bootst een hit na op de F2-toets gevolgd door Alt + DownArrow.
procedure TForm1.DBGrid1CellClick (kolom: TColumn);
beginnen// De vervolgkeuzelijst sneller laten verschijnenals Column.PickList.Count> 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);
einde;
einde;