Come inserire un elenco a discesa Selezionare in un DBgrid

Ecco come posizionare un elenco a discesa in un DBGrid. Crea interfacce utente visivamente più interessanti per la modifica dei campi di ricerca all'interno di un DBGrid - usando la proprietà PickList di una colonna DBGrid.

Ora che sai quali sono i campi di ricerca e quali sono le opzioni per visualizzare un campo di ricerca nel DBGrid di Delphi, è tempo di vedere come utilizzare la proprietà PickList di una colonna DGBrid per consentire a un utente di scegliere un valore per un campo di ricerca da una casella di riepilogo a discesa.

Informazioni rapide sulla proprietà delle colonne DBGrid

Un controllo DBGrid ha una proprietà Columns - una raccolta di oggetti TColumn che rappresentano tutte le colonne in un controllo grid. Le colonne possono essere impostate in fase di progettazione tramite l'editor Colonne o programmaticamente in fase di esecuzione. Di solito aggiungi colonne a DBGird quando vuoi definire come appare una colonna, come vengono visualizzati i dati nella colonna e accedere alle proprietà, agli eventi e ai metodi di TDBGridColumns in fase di esecuzione. Una griglia personalizzata consente di configurare più colonne per presentare diverse viste dello stesso set di dati (ordini di colonne diversi, scelte di campi diverse e colori e caratteri di colonne diversi, ad esempio).

Ora, ogni colonna in una griglia è "collegata" a un campo da un set di dati visualizzato nella griglia. Inoltre, ogni colonna ha una proprietà PickList. La proprietà PickList elenca i valori che l'utente può selezionare per il valore del campo collegato della colonna.

Riempimento dell'elenco di selezione

Quello che imparerai qui è come riempire l'Elenco String con i valori di un altro set di dati in fase di esecuzione.
Ricordiamo che stiamo modificando la tabella Articoli e che un campo Oggetto può accettare solo valori dalla tabella Soggetti: la situazione ideale per il PickList!

Ecco come impostare la proprietà PickList. Innanzitutto, aggiungiamo una chiamata alla procedura SetupGridPickList nel gestore eventi OnCreate del form.

procedura TForm1.FormCreate (Mittente: TObject);
inizio
SetupGridPickList ('Subject', 'SELECT Name FROM Subject');
fine;

Il modo più semplice per creare la procedura SetupGridPickList è andare alla parte privata della dichiarazione del modulo, aggiungere la dichiarazione lì e premere la combinazione di tasti CTRL + MAIUSC + C - Il completamento del codice di Delphi farà il resto:

...
genere
TForm1 = class (TForm)
...
privateprocedure SetupGridPickList (
const FieldName: corda;
const sql: corda);
pubblico
...

Nota: la procedura SetupGridPickList accetta due parametri. Il primo parametro, FieldName, è il nome del campo che vogliamo agire come un campo di ricerca; il secondo parametro, SQL, è l'espressione SQL che usiamo per popolare il PickList con possibili valori - in generale, l'espressione SQL dovrebbe restituire un set di dati con un solo campo.

Ecco come appare SetupGridPickList:

procedura TForm1.SetupGridPickList (const FieldName, sql: corda);
var
slPickList: TStringList;
Query: TADOQuery;
i: numero intero;
inizio
slPickList: = TStringList.Create;
Query: = TADOQuery.Create (self);
provare
Query.Connection: = ADOConnection1;
Query.SQL.Text: = sql;
Query.Open;
// Compila l'elenco di stringhementre non Query.EOF dobegin
slPickList.Add (Query.Fields [0] .AsString);
Query.Next;
fine; //mentre
// posiziona l'elenco nella colonna correttaper i: = 0 per DBGrid1.Columns.Count-1 fare
Se DBGrid1.Columns [i] .FieldName = FieldName thenbegin
DBGrid1.Columns [i] .PickList: = slPickList;
Rompere;
fine;
infine
slPickList.Free;
Query.Free;
fine;
fine; (* SetupGridPickList *)

Questo è tutto. Ora, quando fai clic sulla colonna Oggetto (per accedere alla modalità di modifica).

Nota 1: per impostazione predefinita, l'elenco a discesa visualizza 7 valori. È possibile modificare la lunghezza di questo elenco impostando la proprietà DropDownRows.

Nota 2: nulla impedisce di compilare l'elenco di selezione da un elenco di valori che non provengono da una tabella del database. Se, ad esempio, hai un campo che accetta solo i nomi dei giorni della settimana ('Monday', ..., 'Sunday') puoi costruire un PickList "hard-coded".

"Uh, devo fare clic sull'elenco di selezione 4 volte ..."

Si noti che quando si desidera modificare il campo che visualizza un elenco a discesa, è necessario fare clic sulla cella 4 volte per selezionare effettivamente un valore da un elenco. Il frammento di codice successivo, aggiunto al gestore eventi OnCellClick di DBGrid, imita un hit sul tasto F2 seguito da Alt + Giù freccia.

procedura TForm1.DBGrid1CellClick (Column: TColumn);
inizio// Rende più veloce l'elenco a discesaSe 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);
fine;
fine;