Želite narediti najboljšo mrežo za urejanje podatkov doslej? Spodaj so navodila za izdelavo uporabniškega vmesnika za urejanje polj za iskanje Znotraj DBGrid. Zlasti si bomo ogledali, kako umestiti DBLookupComboBox v celico DBGrid.
To bo naredilo informacije iz vira podatkov, ki bodo uporabljeni za napolnitev spustnega okna.
Če želite prikazati DBLookupComboBox znotraj celice v DBGrid, najprej morate dati eno na voljo v času izvajanja ...
Ustvarite iskanje z DBLookupComboBox
Na paleti komponent izberite stran "Nadzor podatkov" in izberite DBLookupComboBox. Spustite ga kamor koli na obrazcu in pustite privzeto ime "DBLookupComboBox1." Vseeno je, kam jo postavite od večine časa, bo neviden ali lebdi čez mrežo.
Dodajte še eno komponento DataSource in DataSet, da "izpolnite" kombinirano polje z vrednostmi. Spustite TDataSource (z imenom DataSource2) in TAdoQuery (poimenujte ga AdoQuery1) kamor koli na obrazcu.
Za pravilno delovanje DBLookupComboBox je treba nastaviti več lastnosti; oni so ključ do povezave za iskanje:
- Vir podatkov in Podatkovno polje določite glavno povezavo. Podatkovno polje je polje, v katero vstavimo iskane vrednosti.
- ListSource je vir nabora podatkov.
- KeyField identificira polje v ListSource ki mora ustrezati vrednosti Podatkovno polje polje.
-
ListFields je polje (-e) nabora podatkov o iskanju, ki so dejansko prikazane v kombinaciji. ListField lahko prikazuje več kot eno polje, vendar je treba večkratnike ločiti s podpičji.
Za. Morate nastaviti dovolj veliko vrednost DropDownWidth (za ComboBox), da lahko resnično vidite več stolpcev podatkov.
Tukaj je opisano, kako nastaviti vse pomembne lastnosti iz kode (v obrazcu) OnCreate dogodek ravnatelj):
postopek TForm1.FormCreate (Pošiljatelj: TObject);
začni z DBLookupComboBox1 dobegin
DataSource: = DataSource1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'AvtorEmail'; // iz AdoTable1 - prikazano v DBGrid
KeyField: = 'E-pošta';
ListFields: = 'Ime; E-naslov';
Vidno: = napačno;
konec;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'IZBERI ime, e-poštni naslov avtorjev';
AdoQuery1.Odpri;
konec;
Opomba: Če želite v DBLookupComboBox prikazati več polja, kot v zgornjem primeru, se morate prepričati, ali so vsi stolpci vidni. To se naredi z nastavitvijo lastnosti DropDownWidth.
Vendar boste videli, da morate na začetku to nastaviti na zelo veliko vrednost, kar ima za posledico preširok seznam (v večini primerov). Ena od rešitev je nastavitev širine zaslona določenega polja, prikazanega v spustni seznam.
Ta koda, ki je v obrazcu OnCreate za obrazec, zagotavlja, da sta tako ime avtorja kot tudi njegova e-pošta prikazana na spustnem seznamu:
AdoQuery1.FieldByName ('E-pošta'). Širina zaslona: = 10;
AdoQuery1.FieldByName ('Ime'). Širina zaslona: = 10;
AdoQuery1.DropDownWidth: = 150;
Kar nam preostane, je, da dejansko naredimo kombinirano polje, da lebdimo nad celico (ko je v načinu urejanja) in prikaže polje AuthorEmail. Najprej moramo poskrbeti, da se DBLookupComboBox1 premakne in postavi po celici, v kateri je prikazano polje AuthorEmail.
postopek TForm1.DBGrid1DrawColumnCell
(Pošiljatelj: TObject;
const Rect: TRect;
DataCol: Integer;
Stolpec: TColumn;
Stanje: TGridDrawState);
beginif (gdFocused v Država) potembeginif (Stolpec. Polje. FieldName = DBLookupComboBox1.DataField) potem DBLookupComboBox1 stori
začeti
Levo: = Rekt. Levo + DBGrid1.Left + 2;
Na vrh: = Rekt. Na vrh + DBGrid1.Top + 2;
Širina: = Rekt. Pravica - Rect. Levo;
Širina: = Rekt. Pravica - Rect. Levo;
Višina: = Rekt. Spodaj - Rekt. Vrh;
Vidno: = Res;
konec;
konec
konec;
Ko zapustimo celico, moramo skriti kombinirano polje:
postopek TForm1.DBGrid1ColExit (Pošiljatelj: TObject);
beginif DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField torej
DBLookupComboBox1.Visible: = Lažno
konec;
Upoštevajte, da v načinu urejanja vsi pritiski tipk gredo v celico DBGrid, vendar moramo poskrbeti, da so poslani v DBLookupComboBox. V primeru DBLookupComboBox nas zanima predvsem tipka [Tab]; bi moral premakniti vhodni fokus v naslednjo celico.
postopek TForm1.DBGrid1KeyPress (Pošiljatelj: TObject; var tipka: Char);
beginif (tipka = Chr (9)) torej Izhod;
če (DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField) potem začet
DBLookupComboBox1.SetFocus;
SendMessage (DBLookupComboBox1.Handle, WM_Char, beseda (tipka), 0);
konec
konec;
Ko izberete element ("vrstico") iz DBLookupComboBox, vrednost ali ustrezno KeyField se shrani kot vrednost Podatkovno polje polje.