So platzieren Sie eine Dropdown-Auswahlliste in einem DBgrid

So platzieren Sie eine Dropdown-Auswahlliste in einem DBGrid. Erstellen Sie optisch ansprechendere Benutzeroberflächen zum Bearbeiten von Suchfeldern in einem DBGrid - mithilfe der PickList-Eigenschaft einer DBGrid-Spalte.

Nachdem Sie nun wissen, was Nachschlagefelder sind und welche Optionen zum Anzeigen eines Nachschlagefelds in Delphis DBGrid zur Verfügung stehen, ist es an der Zeit, die PickList-Eigenschaft einer DGBrid-Spalte zu verwenden, damit ein Benutzer einen Wert für ein Nachschlagefeld auswählen kann aus einem Dropdown-Listenfeld.

Eine Kurzinformation zur Eigenschaft DBGrid Columns

Ein DBGrid-Steuerelement verfügt über eine Columns-Eigenschaft - eine Auflistung von TColumn-Objekten, die alle Spalten in einem Rastersteuerelement darstellen. Spalten können zur Entwurfszeit über den Spalteneditor oder zur Laufzeit programmgesteuert festgelegt werden. Normalerweise fügen Sie einem DBGird Spalten hinzu, wenn Sie definieren möchten, wie eine Spalte angezeigt wird, wie die Daten in der Spalte angezeigt werden und zur Laufzeit auf die Eigenschaften, Ereignisse und Methoden von TDBGridColumns zugreifen möchten. Mithilfe eines benutzerdefinierten Rasters können Sie mehrere Spalten so konfigurieren, dass unterschiedliche Ansichten desselben Datasets angezeigt werden (z. B. unterschiedliche Spaltenreihenfolgen, unterschiedliche Feldoptionen sowie unterschiedliche Spaltenfarben und Schriftarten)..

Jetzt wird jede Spalte in einem Raster mit einem Feld aus einem im Raster angezeigten Datensatz "verknüpft". Darüber hinaus verfügt jede Spalte über eine PickList-Eigenschaft. Die PickList-Eigenschaft listet Werte auf, die der Benutzer für den Wert des verknüpften Felds der Spalte auswählen kann.

Füllen der PickList

Hier erfahren Sie, wie Sie diese String-Liste zur Laufzeit mit Werten aus einem anderen Dataset füllen.
Denken Sie daran, dass wir die Artikeltabelle bearbeiten und ein Betreff-Feld nur Werte aus der Betreff-Tabelle akzeptieren kann: die ideale Situation für die Auswahlliste!

So richten Sie die Eigenschaft PickList ein. Zunächst fügen wir der Prozedur SetupGridPickList im OnCreate-Ereignishandler des Formulars einen Aufruf hinzu.

Verfahren TForm1.FormCreate (Absender: TObject);
Start
SetupGridPickList ('Subject', 'SELECT Name FROM Subjects');
Ende;

Am einfachsten erstellen Sie die Prozedur SetupGridPickList, indem Sie zum privaten Teil der Formulardeklaration wechseln, die Deklaration dort hinzufügen und die Tastenkombination STRG + UMSCHALT + C drücken. Den Rest erledigt Delphis Code-Vervollständigung:


Art
TForm1 = Klasse (TForm)

Privatverfahren SetupGridPickList (
const Feldname : Zeichenfolge;
const sql: Zeichenfolge);
Öffentlichkeit

Anmerkung: Die Prozedur SetupGridPickList akzeptiert zwei Parameter. Der erste Parameter, FieldName, ist der Name des Felds, das wie ein Nachschlagefeld behandelt werden soll. Der zweite Parameter, SQL, ist der SQL-Ausdruck, mit dem die Auswahlliste mit möglichen Werten gefüllt wird. Im Allgemeinen sollte der SQL-Ausdruck ein Dataset mit nur einem Feld zurückgeben.

So sieht die SetupGridPickList aus:

Verfahren TForm1.SetupGridPickList (const Feldname, sql: Zeichenfolge);
var
slPickList: TStringList;
Abfrage: TADOQuery;
i: ganze Zahl;
Start
slPickList: = TStringList.Create;
Abfrage: = TADOQuery.Create (self);
Versuchen
Query.Connection: = ADOConnection1;
Query.SQL.Text: = sql;
Query.Open;
// Fülle die Stringlistewährend nicht Query.EOF Dobegin
slPickList.Add (Query.Fields [0] .AsString);
Query.Next;
Ende; //während
// Platziere die Liste in der richtigen Spaltezum i: = 0 zu DBGrid1.Columns.Count-1 tun
wenn DBGrid1.Columns [i] .FieldName = FieldName dann fange an
DBGrid1.Columns [i] .PickList: = slPickList;
Brechen;
Ende;
schließlich
slPickList.Free;
Query.Free;
Ende;
Ende; (* SetupGridPickList *)

Das ist es. Wenn Sie nun auf die Spalte Betreff klicken (um in den Bearbeitungsmodus zu gelangen).

Hinweis 1: Standardmäßig werden in der Dropdown-Liste 7 Werte angezeigt. Sie können die Länge dieser Liste ändern, indem Sie die DropDownRows-Eigenschaft festlegen.

Hinweis 2: Nichts hindert Sie daran, die Auswahlliste aus einer Liste von Werten zu füllen, die nicht aus einer Datenbanktabelle stammen. Wenn Sie zum Beispiel ein Feld haben, das nur Wochentagsnamen ('Montag', ..., 'Sonntag') akzeptiert, können Sie eine "fest codierte" Auswahlliste erstellen.

"Äh, ich muss 4 Mal auf die Auswahlliste klicken ..."

Beachten Sie, dass Sie zum Bearbeiten des Felds, in dem eine Dropdown-Liste angezeigt wird, viermal auf die Zelle klicken müssen, um tatsächlich einen Wert aus einer Liste auszuwählen. Das nächste Code-Snippet, das der OnCellClick-Ereignisbehandlungsroutine von DBGrid hinzugefügt wurde, ahmt einen Treffer mit der Taste F2 nach, gefolgt von Alt + Pfeil nach unten.

Verfahren TForm1.DBGrid1CellClick (Spalte: TColumn);
Start// Die Dropdown-Auswahlliste wird schneller angezeigtwenn Column.PickList.Count> 0 dann fange an
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);
Ende;
Ende;