Elenco a discesa all'interno di 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, sai quali sono i campi di ricerca e quali sono le opzioni per visualizzare un campo di ricerca DelphiDBGrid, è 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 DBGrid control 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 aggiungerai colonne a DBGird quando si desidera definire la modalità di visualizzazione di una colonna, la modalità di visualizzazione dei dati nella colonna e l'accesso 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 della stessa set di dati (diversi ordini di colonna, diverse scelte di campo e diversi colori e caratteri di colonna, per esempio).

instagram viewer

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, aggiungi la dichiarazione lì e premi la combinazione di tasti CTRL + MAIUSC + C - Il completamento del codice di Delphi farà il riposo:

...
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 utilizziamo 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. Creare;
Query: = TADOQuery. Crea (auto);
provare
Query. Connessione: = ADOConnection1;
Query. SQL.Text: = sql;
Query. Aperto;
// Compila l'elenco di stringhementrenon Query. EOF dobegin
slPickList. Aggiungi (query. Campi [0] .AsString);
Query. Il prossimo;
fine; //while
// 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. Gratuito;
Query. Gratuito;
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 creare 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 + DownArrow.

procedura TForm1.DBGrid1CellClick (Column: TColumn);
inizio// Rende più veloce l'elenco a discesaSe Colonna. Lista da cui scegliere. Conteggio> 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;
instagram story viewer