Erstellen einer Dropdown-Liste in einem DBGrid

click fraud protection

Möchten Sie das beste Datenbearbeitungsraster aller Zeiten erstellen? Unten finden Sie Anweisungen zum Erstellen einer Benutzeroberfläche zum Bearbeiten von Suchfeldern In einem DBGrid. Insbesondere werden wir uns ansehen, wie eine DBLookupComboBox in eine Zelle eines DBGrid platziert wird.

Dadurch werden Informationen aus einer Datenquelle abgerufen, die zum Auffüllen eines Dropdown-Felds verwendet werden.

So zeigen Sie eine DBLookupComboBox in einer Zelle von a DBGridmüssen Sie zuerst eine zur Laufzeit zur Verfügung stellen ...

Erstellen Sie eine Suche mit einer DBLookupComboBox

Wählen Sie die Seite "Datensteuerelemente" in der Komponentenpalette aus und wählen Sie eine DBLookupComboBox aus. Legen Sie eine an einer beliebigen Stelle im Formular ab und belassen Sie den Standardnamen "DBLookupComboBox1". Es spielt keine Rolle, wo Sie es ablegen, da es die meiste Zeit unsichtbar ist oder über dem Gitter schwebt.

Fügen Sie eine weitere DataSource- und DataSet-Komponente hinzu, um das Kombinationsfeld mit Werten zu "füllen". Legen Sie eine TDataSource (mit dem Namen DataSource2) und TAdoQuery (mit dem Namen AdoQuery1) an einer beliebigen Stelle im Formular ab.

instagram viewer

Damit eine DBLookupComboBox ordnungsgemäß funktioniert, müssen mehrere weitere Eigenschaften festgelegt werden. Sie sind der Schlüssel zur Suchverbindung:

  • Datenquelle und Datenfeld Bestimmen Sie die Hauptverbindung. Das DataField ist ein Feld, in das wir die nachgeschlagenen Werte einfügen.
  • ListSource ist die Quelle des Suchdatensatzes.
  • KeyField identifiziert das Feld in der ListSource das muss mit dem Wert von übereinstimmen Datenfeld Feld.
  • ListFields ist das Feld (die Felder) des Suchdatensatzes, das tatsächlich in der Kombination angezeigt wird. ListField kann mehr als ein Feld anzeigen, aber Vielfache sollten durch Semikolons getrennt werden.
    Sie müssen einen ausreichend großen Wert für das einstellen DropDownWidth (einer ComboBox), um wirklich mehrere Datenspalten zu sehen.
    Hier erfahren Sie, wie Sie alle wichtigen Eigenschaften aus dem Code festlegen (in den Formularen) OnCreate-Ereignis Handler):
Verfahren TForm1.FormCreate (Absender: TObject);
anfangen mit DBLookupComboBox1 Dobegin
DataSource: = DataSource1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'AuthorEmail'; // von AdoTable1 - wird im DBGrid angezeigt
KeyField: = 'E-Mail';
ListFields: = 'Name; Email';
Sichtbar: = Falsch;
Ende;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'Name auswählen, E-Mail von Autoren';
AdoQuery1.Open;
Ende;

Hinweis: Wenn Sie wie im obigen Beispiel mehr als ein Feld in einer DBLookupComboBox anzeigen möchten, müssen Sie sicherstellen, dass alle Spalten sichtbar sind. Dies erfolgt durch Festlegen der DropDownWidth-Eigenschaft.

Sie werden jedoch feststellen, dass Sie dies zunächst auf einen sehr großen Wert einstellen müssen, was dazu führt, dass die Liste der abgelegten Objekte (in den meisten Fällen) zu breit ist. Eine Problemumgehung besteht darin, die Anzeigebreite eines bestimmten Felds festzulegen, das in a angezeigt wird Dropdown-Liste.

Dieser Code, der im OnCreate-Ereignis für das Formular platziert wird, stellt sicher, dass sowohl der Autorenname als auch die E-Mail-Adresse in der Dropdown-Liste angezeigt werden:

AdoQuery1.FieldByName ('Email'). DisplayWidth: = 10;
AdoQuery1.FieldByName ('Name'). DisplayWidth: = 10;
AdoQuery1.DropDownWidth: = 150;

Wir müssen lediglich ein Kombinationsfeld über einer Zelle bewegen (im Bearbeitungsmodus) und das Feld AuthorEmail anzeigen. Zunächst müssen wir sicherstellen, dass die DBLookupComboBox1 über die Zelle verschoben und in der Größe angepasst wird, in der das AuthorEmail-Feld angezeigt wird.

Verfahren TForm1.DBGrid1DrawColumnCell
(Absender: TObject;
const Rect: TRect;
DataCol: Integer;
Spalte: TColumn;
Status: TGridDrawState);
beginif (gdFocused im Zustand) thenbeginif (Säule. Feld. FieldName = DBLookupComboBox1.DataField) dannmit DBLookupComboBox1 tun
Start
Links: = Rect. Links + DBGrid1.Left + 2;
Oben: = Rect. Top + DBGrid1.Top + 2;
Breite: = Rect. Richtig - Richtig. Links;
Breite: = Rect. Richtig - Richtig. Links;
Höhe: = Rect. Unten - Rect. Oben;
Sichtbar: = Wahr;
Ende;
Ende
Ende;

Wenn wir die Zelle verlassen, müssen wir das Kombinationsfeld ausblenden:

Verfahren TForm1.DBGrid1ColExit (Absender: TObject);
beginif DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField dann
DBLookupComboBox1.Visible: = False
Ende;

Beachten Sie, dass im Bearbeitungsmodus alle Tastenanschläge in die DBGrid-Zelle geleitet werden. Wir müssen jedoch sicherstellen, dass sie an die DBLookupComboBox gesendet werden. Im Fall einer DBLookupComboBox interessiert uns hauptsächlich die Taste [Tab]; Der Eingabefokus sollte in die nächste Zelle verschoben werden.

Verfahren TForm1.DBGrid1KeyPress (Absender: TObject; var Key: Char);
beginif (Schlüssel = Chr (9)) dann Ausgang;
wenn (DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField) dann fang an
DBLookupComboBox1.SetFocus;
SendMessage (DBLookupComboBox1.Handle, WM_Char, Wort (Schlüssel), 0);
Ende
Ende;

Wenn Sie ein Element ("Zeile") aus einer DBLookupComboBox auswählen, wird der Wert oder der entsprechende Wert angezeigt KeyField Feld wird als Wert von gespeichert Datenfeld Feld.

instagram story viewer