Nolaižamā saraksta izveidošana DBGrid

Vai vēlaties izveidot visu laiku labāko datu rediģēšanas sistēmu? Zemāk ir norādījumi par lietotāja interfeisa izveidi uzmeklēšanas lauku rediģēšanai DBGrid iekšpusē. Konkrēti, mēs apskatīsim, kā ievietot DBLookupComboBox DBGrid šūnā.

Tas tiks darīts, izmantojot informāciju no datu avota, kas tiks izmantots nolaižamā lodziņa aizpildīšanai.

Lai parādītu DBLookupComboBox a šūnā DBGrid, vispirms tas jāpadara pieejams izpildes laikā ...

Izveidojiet uzmeklēšanu, izmantojot DBLookupComboBox

Komponentu paletē atlasiet lapu "Datu vadīklas" un izvēlieties DBLookupComboBox. Pametiet to jebkurā veidlapas vietā un atstājiet noklusējuma nosaukumu "DBLookupComboBox1". Nav svarīgi, kur jūs to ievietojat, jo lielāko daļu laika tas būs neredzams vai peld virs režģa.

Pievienojiet vēl vienu DataSource un DataSet komponentu, lai "aizpildītu" kombinēto lodziņu ar vērtībām. Jebkurā veidlapas vietā nometiet TDataSource (ar nosaukumu DataSource2) un TAdoQuery (nosauciet to AdoQuery1).

Lai DBLookupComboBox darbotos pareizi, jāiestata vēl vairākas īpašības; tie ir meklēšanas savienojuma atslēga:

instagram viewer
  • Datu avots un Datu lauks noteikt galveno savienojumu. DataField ir lauks, kurā mēs ievietojam uzmeklētās vērtības.
  • ListSource ir uzmeklēšanas datu kopas avots.
  • KeyField identificē lauku ListSource kam jāatbilst Datu lauks lauka.
  • ListFields ir uzmeklēšanas datu kopas lauks (-i), kas faktiski tiek parādīts kombo. ListField var parādīt vairāk nekā vienu lauku, bet daudzkārtņus vajadzētu atdalīt ar semikolu.
    Jums ir jāiestata pietiekami liela vērtība DropDownWidth (no ComboBox), lai tiešām redzētu vairākas datu kolonnas.
    Tālāk ir norādīts, kā no koda iestatīt visas svarīgās īpašības (veidlapā OnCreate pasākums apstrādātājs):
procedūra TForm1.FormCreate (Sūtītājs: TObject);
Sāciet ar DBLookupComboBox1 dobegin
Datu avots: = Datu avots1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'AuthorEmail'; // no AdoTable1 - parādīts DBGrid
KeyField: = 'E-pasts';
ListFields: = 'Vārds; E-pasts ”;
Redzams: = nepatiess;
beigas;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'SELECT Name, Email from Authors';
AdoQuery1.Open;
beigas;

Piezīme: Ja vēlaties, piemēram, iepriekšējā piemērā, DBLookupComboBox parādīt vairāk nekā vienu lauku, jums jāpārliecinās, ka visas kolonnas ir redzamas. Tas tiek darīts, iestatot īpašību DropDownWidth.

Tomēr jūs redzēsit, ka sākotnēji jums tas jāiestata uz ļoti lielu vērtību, kā rezultātā kritušo saraksts ir pārāk plašs (vairumā gadījumu). Viens risinājums ir iestatīt konkrēta lauka, kas parādīts a, displeja platumu izvēlnes saraksts.

Šis kods, kas ir ievietots formas OnCreate notikumā, nodrošina, ka nolaižamajā sarakstā tiek parādīts gan autora vārds, gan tā e-pasts:

AdoQuery1.FieldByName ('E-pasts'). Displeja platums: = 10;
AdoQuery1.FieldByName ('Nosaukums'). Displeja platums: = 10;
AdoQuery1.DropDownWidth: = 150;

Mums atliek tikai izdarīt kombinētā lodziņa rādīšanu virs šūnas (rediģēšanas režīmā), parādot AuthorEmail lauku. Pirmkārt, mums jāpārliecinās, vai DBLookupComboBox1 ir pārvietots un izmērīts virs šūnas, kurā tiek parādīts lauks AuthorEmail.

procedūra TForm1.DBGrid1DrawColumnCell
(Sūtītājs: TObject;
const Rect: TRect;
DataCol: vesels skaitlis;
Kolonna: TC kolonna;
Štats: TGridDrawState);
iesākums (gdFocused iekšā Valsts) tadbeginifs (Sleja. Lauks. FieldName = DBLookupComboBox1.DataField) pēc tam DBLookupComboBox1 darīt
sākt
Pa kreisi: = Rect. Kreisais + DBGrid1.Left + 2;
Augšpusē: = Rect. Augšā + DBGrid1.Top + 2;
Platums: = Rect. Pa labi - rekt. Kreisais;
Platums: = Rect. Pa labi - rekt. Kreisais;
Augstums: = Rect. Apakšā - rekt. Tops;
Redzams: = patiess;
beigas;
beigas
beigas;

Pēc tam, izejot no šūnas, mums jāslēpj kombinētais lodziņš:

procedūra TForm1.DBGrid1ColExit (Sūtītājs: TObject);
iesākums DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField tad
DBLookupComboBox1.Visible: = Nepatiess
beigas;

Ņemiet vērā, ka rediģēšanas režīmā visi taustiņsitieni nonāk DBGrid šūnā, taču mums jāpārliecinās, vai tie tiek nosūtīti uz DBLookupComboBox. DBLookupComboBox gadījumā mūs galvenokārt interesē taustiņš [Tab]; tai vajadzētu pārvietot ievades fokusu uz nākamo šūnu.

procedūra TForm1.DBGrid1KeyPress (Sūtītājs: TObject; var Taustiņš: Char);
iesākums (taustiņš = Chr (9)) tad Izeja;
ja (DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField) tad sāk
DBLookupComboBox1.SetFocus;
SendMessage (DBLookupComboBox1.Handle, WM_Char, word (Key), 0);
beigas
beigas;

Izvēloties vienumu (“rindu”) no DBLookupComboBox, vērtība vai atbilstošā KeyField lauks tiek saglabāts kā Datu lauks lauka.

instagram story viewer