Wilt u het beste gegevensbewerkingsraster ooit maken? Hieronder staan instructies voor het bouwen van een gebruikersinterface voor het bewerken van opzoekvelden in een DBGrid. In het bijzonder zullen we kijken hoe we een DBLookupComboBox in een cel van een DBGrid kunnen plaatsen.
Wat dit zal doen, is een beroep doen op informatie uit een gegevensbron die zal worden gebruikt om een vervolgkeuzelijst te vullen.
Als u een DBLookupComboBox in een cel van een DBGrid wilt weergeven, moet u er eerst een beschikbaar maken tijdens runtime ...
Selecteer de pagina "Gegevensbesturing" in het componentenpalet en kies een DBLookupComboBox. Zet er ergens een neer op het formulier en laat de standaardnaam 'DBLookupComboBox1' achter. Het maakt niet uit waar je het plaatst, omdat het meestal onzichtbaar is of over het raster zweeft.
Voeg nog een DataSource- en DataSet-component toe om de keuzelijst met waarden te "vullen". Zet een TDataSource (met de naam DataSource2) en TAdoQuery (noem het AdoQuery1) ergens op het formulier neer.
Om een DBLookupComboBox goed te laten werken, moeten nog enkele eigenschappen worden ingesteld; zij zijn de sleutel tot de opzoekverbinding:
procedure TForm1.FormCreate (Sender: TObject);
begin met DBLookupComboBox1 dobegin
DataSource: = DataSource1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'AuthorEmail'; // from AdoTable1 - weergegeven in de DBGrid
KeyField: = 'Email';
ListFields: = 'Naam; E-mail ';
Zichtbaar: = niet waar;
einde;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'SELECTEER Naam, e-mail VAN auteurs';
AdoQuery1.Open;
einde;
Notitie: Als u meer dan één veld in een DBLookupComboBox wilt weergeven, zoals in het bovenstaande voorbeeld, moet u ervoor zorgen dat alle kolommen zichtbaar zijn. Dit wordt gedaan door de eigenschap DropDownWidth in te stellen.
U zult echter zien dat u dit in eerste instantie op een zeer grote waarde moet instellen, wat ertoe leidt dat de verwijderde lijst te breed is (in de meeste gevallen). Een tijdelijke oplossing is om de DisplayWidth van een bepaald veld in een vervolgkeuzelijst in te stellen.
Deze code, geplaatst in de OnCreate-gebeurtenis voor het formulier, zorgt ervoor dat zowel de auteursnaam als de e-mail worden weergegeven in de vervolgkeuzelijst:
AdoQuery1.FieldByName ( 'E-mail') vertoonbreedte:. = 10;
AdoQuery1.FieldByName ( 'Name') vertoonbreedte:. = 10;
AdoQuery1.DropDownWidth: = 150;
Wat we nog moeten doen, is een keuzelijst daadwerkelijk boven een cel laten zweven (in de bewerkingsmodus), met het veld AuthorEmail. Eerst moeten we ervoor zorgen dat de DBLookupComboBox1 wordt verplaatst en de grootte wordt aangepast van de cel waarin het veld AuthorEmail wordt weergegeven.
procedure TForm1.DBGrid1DrawColumnCell
(Afzender: TObject;
const Rect: TRect;
DataCol: geheel getal;
Kolom: TColumn;
Staat: TGridDrawState);
beginif (gdFocused in Staat) thenbeginif (Column.Field.FieldName = DBLookupComboBox1.DataField) thenwith DBLookupComboBox1 Doen
beginnen
Links: = Rect.Left + DBGrid1.Left + 2;
Boven: = Rect.Top + DBGrid1.Top + 2;
Breedte: = Rect.Right - Rect.Left;
Breedte: = Rect.Right - Rect.Left;
Hoogte: = Rect. Bodem - Rect. Bovenkant;
Zichtbaar: = waar;
einde;
einde
einde;
Als we de cel verlaten, moeten we de keuzelijst verbergen:
procedure TForm1.DBGrid1ColExit (Sender: TObject);
beginif DBGrid1.SelectedField.FieldName = DBLookupComboBox1.DataField vervolgens
DBLookupComboBox1.Visible: = False
einde;