Come inserire un elenco di selezione a discesa in una griglia DB

Ecco come inserire un elenco di selezione a discesa in un controllo DBGrid. Creare interfacce utente visivamente più attraenti per modificare i campi di ricerca all'interno di un controllo DBGrid, utilizzando la proprietà PickList di una colonna DBGrid.

Ora che sai cosa sono i campi di ricerca e quali sono le opzioni per visualizzare un campo di ricerca nel DBGrid di Delphi, è il momento 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 dispone di una proprietà Columns, un insieme di oggetti TColumn che rappresentano tutte le colonne in un controllo griglia. Le colonne possono essere impostate in fase di progettazione tramite l'editor di colonne o a livello di codice in fase di esecuzione. Di solito si aggiungono colonne a un DBGird quando si desidera definire come viene visualizzata una colonna, come vengono visualizzati i dati nella colonna e per 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 visualizzazioni dello stesso set di dati (diversi ordini di colonne, diverse scelte di campi e diversi colori e caratteri delle colonne, 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.

Compilazione della PickList

Quello che imparerai qui è come riempire quell'elenco di stringhe 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 la PickList!

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

procedura TForm1.FormCreate (Sender: TObject);
iniziare
SetupGridPickList ('Oggetto', 'SELEZIONA nome DA soggetti');
fine;

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

...
Digitare
TForm1 = class (TForm)
...
procedura privata SetupGridPickList (
const FieldName: stringa;
const sql: stringa);
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 la PickList con i 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: stringa);
var
slPickList: TStringList;
Query: TADOQuery;
i: intero;
iniziare
slPickList: = TStringList.Create;
Query: = TADOQuery.Create (self);
prova
Query.Connection: = ADOConnection1;
Query.SQL.Text: = sql;
Domanda. Apri;
// Riempie l'elenco di stringhewhile non Query.EOF dobegin
slPickList.Add (Query.Fields [0] .AsString);
Query.Next;
fine; //mentre
// posiziona l'elenco nella colonna correttaper i: = 0 a DBGrid1.Columns.Count-1 do
if DBGrid1.Columns [i] .FieldName = FieldName quindi iniziare
DBGrid1.Columns [i] .PickList: = slPickList;
break;
fine;
infine
slPickList.Free;
Query.Free;
fine;
fine; (* SetupGridPickList *)

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

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

Nota 2: nulla ti impedisce di riempire la PickList da un elenco di valori non provenienti da una tabella di database. Se, ad esempio, hai un campo che accetta solo i nomi dei giorni della settimana ("lunedì", ..., "domenica") puoi creare un elenco di selezione "hardcoded".

"Uh, devo fare clic su PickList 4 volte ..."

Tieni presente che quando desideri modificare il campo che visualizza un elenco a discesa, dovrai fare clic sulla cella 4 volte per selezionare effettivamente un valore da un elenco. Il frammento di codice successivo, aggiunto al gestore di eventi OnCellClick di DBGrid, simula un hit al tasto F2 seguito da Alt + DownArrow.

procedura TForm1.DBGrid1CellClick (colonna: TColumn);
iniziare// Rende più veloce la visualizzazione dell'elenco a discesaif Column.PickList.Count> 0 quindi iniziare
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;