Išskleidžiamojo sąrašo sudarymas „DBGrid“

Ar norite sukurti geriausią duomenų redagavimo tinklelį? Žemiau pateikiamos instrukcijos, kaip sukurti vartotojo sąsają, kad būtų galima redaguoti paieškos laukus „DBGrid“ viduje. Tiksliau, mes nagrinėsime, kaip įkelti „DBLookupComboBox“ į „DBGrid“ langelį.

Tai bus padaryta, kai bus kreipiamasi į informaciją iš duomenų šaltinio, kuris bus naudojamas išskleidžiamajam laukeliui užpildyti.

Norėdami parodyti „DBLookupComboBox“ langelyje DBGrid, pirmiausia turite padaryti jį prieinamą vykdymo metu ...

Sukurkite peržvalgą naudodami „DBLookupComboBox“

Komponentų paletėje pasirinkite puslapį „Duomenų valdikliai“ ir pasirinkite „DBLookupComboBox“. Pameskite bet kurią formos formą ir palikite numatytąjį pavadinimą „DBLookupComboBox1“. Nesvarbu, kur jį įdėjote, nes dažniausiai jis bus nematomas arba plūduriuoja tinklelyje.

Pridėkite dar vieną „DataSource“ ir „DataSet“ komponentą, kad „užpildytumėte“ jungtuką reikšmėmis. Bet kurioje formos vietoje išmeskite „TDataSource“ (pavadinimu DataSource2) ir „TAdoQuery“ (pavadinkite ją „AdoQuery1“).

instagram viewer

Kad „DBLookupComboBox“ tinkamai veiktų, reikia nustatyti dar keletą savybių; jie yra paieškos ryšio raktas:

  • Duomenų šaltinis ir Duomenų laukas nustatyti pagrindinį ryšį. „DataField“ yra laukas, į kurį įterpiame ieškomas reikšmes.
  • „ListSource“ yra paieškos duomenų rinkinio šaltinis.
  • „KeyField“ identifikuoja lauką „ListSource“ tai turi atitikti Duomenų laukas laukas.
  • Sąrašo laukai yra paieškos duomenų rinkinio laukas (-ai), kurie iš tikrųjų rodomi kombo. „ListField“ gali rodyti daugiau nei vieną lauką, tačiau kartotiniai turėtų būti atskirti kabliataškiais.
    Jūs turite nustatyti pakankamai didelę reikšmę „DropDownWidth“ („ComboBox“), kad būtų galima pamatyti kelis duomenų stulpelius.
    Štai kaip nustatyti visas svarbias kodo savybes (formos formoje) „OnCreate“ renginys prižiūrėtojas):
procedūra TForm1.FormCreate (Siuntėjas: TObject);
pradėti nuo „DBLookupComboBox1“ dobeginas
„DataSource“: = „DataSource1“; // -> „AdoTable1“ -> „DBGrid1“
„ListSource“: = „DataSource2“;
DataField: = 'AuthorEmail'; // iš „AdoTable1“ - rodomas „DBGrid“
KeyField: = 'El. Paštas';
ListFields: = 'Vardas; Paštas ';
Matoma: = klaidinga;
galas;
„DataSource2.DataSet“: = „AdoQuery1“;
„AdoQuery1.Connection“: = „AdoConnection1“;
AdoQuery1.SQL.Text: = 'PASIRINKITE vardą, el. Laišką iš autorių';
„AdoQuery1.Open“;
galas;

Pastaba: Kai „DBLookupComboBox“ norite parodyti daugiau nei vieną lauką, kaip aukščiau pateiktame pavyzdyje, turite įsitikinti, kad visi stulpeliai yra matomi. Tai atliekama nustatant ypatybę „DropDownWidth“.

Tačiau pamatysite, kad iš pradžių turite tai nustatyti kaip labai didelę reikšmę, dėl kurios sumažėjęs sąrašas yra per platus (daugeliu atvejų). Vienas iš būdų yra nustatyti tam tikro lauko, rodomo a., Ekrano plotį Pasirinkimu sarasas.

Šis kodas, įdėtas į formos „OnCreate“ įvykį, užtikrina, kad išskleidžiamajame sąraše būtų rodomas tiek autoriaus vardas, tiek jo el. Pašto adresas:

„AdoQuery1.FieldByName“ („El. Paštas“). „DisplayWidth“: = 10;
„AdoQuery1.FieldByName“ („Pavadinimas“). „DisplayWidth“: = 10;
„AdoQuery1.DropDownWidth“: = 150;

Liko mums iš tikrųjų padaryti papildomą langelį, užvedus pelės žymeklį virš langelio (kai jis veikia redagavimo režimu), kuriame rodomas „AuthorEmail“ laukas. Pirmiausia turime įsitikinti, kad „DBLookupComboBox1“ yra perkeltas ir pakeistas dydžiu virš langelio, kuriame rodomas „AuthorEmail“ laukas.

procedūra „TForm1.DBGrid1DrawColumnCell“
(Siuntėjas: TObject;
const Rect: TRect;
„DataCol“: sveikasis skaičius;
Stulpelis: TC stulpelis;
Valstija: TGridDrawState);
pradžia („gdFocused“) į Valstija) tadabeginifas (Kolona. Laukas. FieldName = DBLookupComboBox1.DataField) po to „DBLookupComboBox1“ daryti
prasideda
Kairė: = Rekt. Kairė + DBGrid1.Kairė + 2;
Viršuje: = Rekt. „Top + DBGrid1.Top + 2“;
Plotis: = Rekt. Dešinė - Rekt. Kairė;
Plotis: = Rekt. Dešinė - Rekt. Kairė;
Aukštis: = Rekt. Apačia - Rekt. Viršuje;
Matoma: = Tiesa;
galas;
galas
galas;

Kitas, išeidamas iš langelio, turime paslėpti papildomą dėžę:

procedūra „TForm1.DBGrid1ColExit“ (siuntėjas: „TObject“);
pradžia „DBGrid1.SelectedField“. FieldName = DBLookupComboBox1.DataField tada
DBLookupComboBox1.Visible: = Netiesa
galas;

Atminkite, kad redagavimo režime visi klavišų paspaudimai eina į „DBGrid“ langelį, tačiau mes turime įsitikinti, kad jie yra nusiųsti į „DBLookupComboBox“. DBLookupComboBox atveju mus pirmiausia domina klavišas [Tab]; jis turėtų perkelti įvesties židinį į kitą langelį.

procedūra TForm1.DBGrid1KeyPress (Siuntėjas: TObject; var raktas: Char);
pradžia (raktas = Chr (9)) tada Išeiti;
jei („DBGrid1.SelectedField“. FieldName = DBLookupComboBox1.DataField) tada pradedama
DBLookupComboBox1.SetFocus;
„SendMessage“ („DBLookupComboBox1.Handle“, „WM_Char“, „word“ (raktas), 0);
galas
galas;

Kai pasirenkate elementą („eilutę“) iš „DBLookupComboBox“, vertė arba atitinkama „KeyField“ laukas saugomas kaip Duomenų laukas laukas.