Doriți să faceți cea mai bună grilă de editare a datelor vreodată? Mai jos sunt instrucțiuni pentru crearea unei interfețe de utilizator pentru editarea câmpurilor de căutare în cadrul unui DBGrid. Mai exact, vom analiza cum să plasați un DBLookupComboBox într-o celulă a unui DBGrid.
Ceea ce va face acest lucru este să solicitați informații de la o sursă de date care va fi folosită pentru a popula o casetă derulantă.
Pentru a afișa un DBLookupComboBox în interiorul unei celule a unui DBGrid, mai întâi trebuie să faceți una disponibilă în timpul rulării ...
Selectați pagina „Control de date” din Paleta de componente și alegeți un DBLookupComboBox. Aruncați unul oriunde pe formular și lăsați numele implicit al „DBLookupComboBox1”. Nu contează unde l-ați plasat, deoarece de cele mai multe ori, va fi invizibil sau va pluti peste grilă.
Adăugați încă o componentă DataSource și DataSet pentru a „completa” caseta combo cu valori. Aruncați o TDataSource (cu numele DataSource2) și TAdoQuery (denumiți-o AdoQuery1) oriunde pe formular.
Pentru ca un DBLookupComboBox să funcționeze corect, trebuie setate mai multe proprietăți; ele sunt cheia conexiunii de căutare:
procedură TForm1.FormCreate (Expeditor: TObject);
începe cu DBLookupComboBox1 dobegin
DataSource: = DataSource1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'AuthorEmail'; // din AdoTable1 - afișat în DBGrid
KeyField: = 'Email';
ListFields: = 'Nume; E-mail';
Vizibil: = Fals;
Sfârșit;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'SELECTĂ NUMELE, E-mail DE LA Autori';
AdoQuery1.Open;
Sfârșit;
Notă: Când doriți să afișați mai multe câmpuri într-un DBLookupComboBox, ca în exemplul de mai sus, trebuie să vă asigurați că toate coloanele sunt vizibile. Acest lucru se realizează prin setarea proprietății DropDownWidth.
Cu toate acestea, veți vedea că inițial, trebuie să setați aceasta la o valoare foarte mare, ceea ce duce la faptul că lista abandonată este prea largă (în majoritatea cazurilor). O soluție este de a seta lățimea de afișare a unui anumit câmp prezentat într-o listă derulantă.
Acest cod, plasat în cadrul evenimentului OnCreate pentru formular, asigură că atât numele autorului, cât și e-mailul său sunt afișate în lista derulantă:
AdoQuery1.FieldByName ( 'Email') DisplayWidth:. = 10;
AdoQuery1.FieldByName ( 'Name') DisplayWidth:. = 10;
AdoQuery1.DropDownWidth: = 150;
Ceea ce ne mai rămâne de făcut este să facem efectiv o casetă combo peste o celulă (când este în mod de editare), afișând câmpul AuthorEmail. În primul rând, trebuie să ne asigurăm că DBLookupComboBox1 este mutat și dimensionat peste celula în care este afișat câmpul AuthorEmail.
procedură TForm1.DBGrid1DrawColumnCell
(Expeditor: TObject;
const Rect: TRect;
DataCol: Integer;
Coloana: TColumn;
Stat: TGridDrawState);
beginif (gdFocused în Stat) thenbeginif (Column.Field.FieldName = DBLookupComboBox1.DataField) thenwith DBLookupComboBox1 do
începe
Stânga: = Rect.Left + DBGrid1.Left + 2;
Sus: = Rect.Top + DBGrid1.Top + 2;
Latime: = Rect.Right - Rect.Left;
Latime: = Rect.Right - Rect.Left;
Înălțime: = Rect.Bottom - Rect.Top;
Vizibil: = Adevărat;
Sfârșit;
Sfârșit
Sfârșit;
În continuare, când părăsim celula, trebuie să ascundem caseta combo:
procedură TForm1.DBGrid1ColExit (Expeditor: TObject);
beginif DBGrid1.SelectedField.FieldName = DBLookupComboBox1.DataField apoi
DBLookupComboBox1.Visible: = False
Sfârșit;