Kas soovite luua parimate andmete redigeerimise ruudud? Allpool on juhised kasutajaliidese loomiseks otsinguväljade redigeerimiseks DBGridi sees. Täpsemalt vaatleme, kuidas DBLookupComboBox paigutada DBGridi lahtrisse.
See nõuab teabe hankimist andmeallikast, mida kasutatakse rippmenüü täitmiseks.
DBLookupComboBoxi kuvamiseks lahtris DBGrid, peate esmalt selle käitamise ajal kättesaadavaks tegema ...
Looge otsing DBLookupComboBoxiga
Valige komponentide paletti leht "Andmejuhtimine" ja valige DBLookupComboBox. Pange üks vormile ükskõik kuhu ja jätke vaikenimi "DBLookupComboBox1". Pole tähtis, kuhu paned, kuna enamasti on see nähtamatu või hõljub üle võrgu.
Lisage veel üks DataSource ja DataSet komponent, et "täita" liitkast kasti väärtustega. Tilgutage vormi ükskõik kuhu TDataSource (nimega DataSource2) ja TAdoQuery (nimetage see AdoQuery1).
DBLookupComboBoxi korrektseks tööks tuleb seada veel mitu atribuuti; need on otsimisühenduse võti:
- Andmeallikas ja Andmeväli määrake peamine ühendus. Andmeväli on väli, kuhu sisestame otsitud väärtused.
- Loendiallikas on otsingu andmestiku allikas.
- KeyField identifitseerib välja väljal Loendiallikas mis peab vastama väärtusele Andmeväli põld.
-
Loendiväljad on otsingu andmestiku väljad (väljad), mida tegelikult kombinatsioonis kuvatakse. Loendiväli võib näidata rohkem kui ühte välja, kuid mitu korda tuleks eraldada semikoolonitega.
Selle jaoks peate määrama piisavalt suure väärtuse DropDownWidth (ComboBoxis), et näha tõesti mitu andmeveergu.
Siit saate teada, kuidas kõik olulised atribuudid koodist (vormi vormides) seada OnCreate'i sündmus käitleja):
protseduur TForm1.FormCreate (saatja: TObject);
algab DBLookupComboBox1 dobegin
Andmeallikas: = andmeallikas1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'AuthorEmail'; // AdoTable1-st - kuvatakse DBGridis
KeyField: = 'E-post';
Loendiväljad: = 'Nimi; E-post ';
Nähtav: = vale;
lõpp;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'VALI nimi, e-post autoritelt';
AdoQuery1.Open;
lõpp;
Märge: Kui soovite DBLookupComboBoxis kuvada rohkem kui ühte välja, nagu ülaltoodud näites, peate veenduma, et kõik veerud oleksid nähtavad. Selleks seadistage atribuut DropDownWidth.
Kuid näete, et esialgu peate selle määrama väga suureks, mille tulemuseks on loendist väljalangemine (enamikul juhtudel) liiga lai. Üks võimalus on seada a-l näidatud konkreetse välja kuvari laius rippmenüü.
See vorm, mis on vormi OnCreate sündmuse sisse paigutatud, tagab, et nii autori nimi kui ka e-posti aadress kuvatakse ripploendis:
AdoQuery1.FieldByName ('Email'). DisplayWidth: = 10;
AdoQuery1.FieldByName ('Nimi'). Kuvalaius: = 10;
AdoQuery1.DropDownWidth: = 150;
Mis meile jääb, on tegelikult muuta liitkast kasti kohal (kui olete redigeerimisrežiimis) lahtri kohal, kuvades välja AuthorEmail. Esiteks peame veenduma, et DBLookupComboBox1 on teisaldatud ja suurusega üle lahtri, milles kuvatakse välja AutorEmail.
protseduur TForm1.DBGrid1DrawColumnCell
(Saatja: TObject;
const Rect: TRect;
DataCol: täisarv;
Veerg: TCveerg;
Osariik: TGridDrawState);
algav (gdFocused sisse Osariik) siisbeginif (Veerg. Väli. FieldName = DBLookupComboBox1.DataField) siis koos sellega DBLookupComboBox1 teha
alustada
Vasakpoolne: = Rekt. Vasak + DBGrid1.Left + 2;
Ülaosa: = rekt. Üles + DBGrid1.Top + 2;
Laius: = Rekt. Õige - rekt. Vasak;
Laius: = Rekt. Õige - rekt. Vasak;
Kõrgus: = rekt. Põhi - rekt. Ülaosa;
Nähtav: = tõsi;
lõpp;
lõpp
lõpp;
Järgmisena peame lahtrist lahkudes liitboksi peitma:
protseduur TForm1.DBGrid1ColExit (saatja: TObject);
algav DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField siis
DBLookupComboBox1.Visible: = Vale
lõpp;
Pange tähele, et redigeerimisrežiimis suunatakse kõik klahvivajutused DBGridi lahtrisse, kuid peame kontrollima, et need saadetaks DBLookupComboBoxi. DBLookupComboBoxi puhul huvitab meid ennekõike klahv [Tab]; see peaks sisendfookuse teisaldama järgmisse lahtrisse.
protseduur TForm1.DBGrid1KeyPress (saatja: TObject; var võti: Char);
algav (võti = Chr (9)) siis Väljapääs;
kui (DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField) siis alustatakse
DBLookupComboBox1.SetFocus;
SendMessage (DBLookupComboBox1.Handle, WM_Char, sõna (võti), 0);
lõpp
lõpp;
Kui valite DBLookupComboBoxist üksuse ("rea"), siis väärtus või vastav väärtus KeyField väli salvestatakse kui väärtus Andmeväli põld.