Legördülő lista készítése a DBGrid programban

click fraud protection

Szeretné megszerezni a legjobb adatszerkesztő rácsot? Az alábbiakban bemutatjuk a felhasználói felület felépítését a keresési mezők szerkesztéséhez A DBGrid belsejében. Konkrétan azt vizsgáljuk meg, hogyan helyezhetünk el egy DBLookupComboBox-ot egy DBGrid cellába.

Ehhez információt kér egy olyan adatforrásról, amelyet a legördülő mező kitöltésére használnak.

A DBLookupComboBox megjelenítése a cellában DBGrid, először rendelkezésre kell bocsátania egy futási időben ...

Hozzon létre egy keresést a DBLookupComboBox segítségével

Válassza az "Adatvezérlők" oldalt a Komponenspalettán, és válasszon egy DBLookupComboBox-ot. Dobjon el egyet az űrlap bármely pontjáról, és hagyja el az alapértelmezett "DBLookupComboBox1" nevet. Nem számít, hová helyezi, mivel az idő nagy része láthatatlan vagy lebeg a rács felett.

Adjon hozzá még egy DataSource és DataSet összetevőt a "mező kitöltéséhez" az értékekkel. Dobj el egy TDataSource-t (DataSource2 névvel) és a TAdoQuery-t (AdoQuery1-nek neve) az űrlap bármely pontjára.

instagram viewer

A DBLookupComboBox megfelelő működéséhez több további tulajdonságot kell beállítani; ők a keresési kapcsolat kulcsa:

  • Adatforrás és DataField meghatározza a fő kapcsolatot. Az Adat mező egy olyan mező, amelybe beilleszti a keresett értékeket.
  • ListSource a keresési adatkészlet forrása.
  • KeyField azonosítja a mezőt a ListSource ennek meg kell egyeznie a DataField terület.
  • ListFields a keresési adatkészlet mező (i), amelyek ténylegesen megjelennek a kombinációban. A ListField egynél több mezőt is megjeleníthet, de a többszöröseket pontosvesszővel kell elválasztani.
    Be kell állítania elég nagy értéket a DropDownWidth (egy ComboBox), hogy valóban több oszlop adatait láthassa.
    Így állíthatja be az összes fontos tulajdonságot a kód alapján (az űrlapon OnCreate esemény handler):
eljárás TForm1.FormCreate (küldő: TObject);
kezdve DBLookupComboBox1 dobegin
DataSource: = DataSource1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'AuthorEmail'; // az AdoTable1-ből - megjelenik a DBGrid-ben
KeyField: = 'E-mail';
ListFields: = 'Név; Email';
Látható: = hamis;
vég;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'SELECT név, e-mail a szerzőktől';
AdoQuery1.Open;
vég;

Jegyzet: Ha egynél több mezőt szeretne megjeleníteni a DBLookupComboBox-ban, mint a fenti példában, akkor ellenőriznie kell, hogy az összes oszlop látható-e. Ez a DropDownWidth tulajdonság beállításával történik.

Látni fogja azonban, hogy kezdetben ezt egy nagyon nagy értékre kell állítania, ami azt eredményezi, hogy a leesett lista túl széles (a legtöbb esetben). Az egyik megoldás az a mezőben látható egy adott mező DisplayW szélességének beállítása legördülő lista.

Ez az űrlap OnCreate eseményébe helyezett kód biztosítja, hogy a szerző neve és e-mailje egyaránt megjelenjen a legördülő listán:

AdoQuery1.FieldByName ( 'E-mail'). DisplayWidth: = 10;
AdoQuery1.FieldByName ( 'Name'). DisplayWidth: = 10;
AdoQuery1.DropDownWidth: = 150;

Csak annyit kell tennünk, hogy valójában egy kombinált dobozt vigyünk egy cella fölé (szerkesztés módban), megjelenítve a AuthorEmail mezőt. Először ellenőriznünk kell, hogy a DBLookupComboBox1 áthelyeződik-e és méretezett-e a cellán, amelyen az AuthorEmail mező megjelenik.

eljárás TForm1.DBGrid1DrawColumnCell
(Feladó: TObject;
const Rect: TRect;
DataCol: egész szám;
Oszlop: TC oszlop;
Állam: TGridDrawState);
beginif (gdFocused ban ben Állapot) thenbeginif (Oszlop. Terület. FieldName = DBLookupComboBox1.DataField) thenwith DBLookupComboBox1 csinál
kezdődik
Balra: = Rekt. Bal + DBGrid1.Left + 2;
Top: = Rect. Top + DBGrid1.Top + 2;
Szélesség: = Rekt. Jobbra - Rect. Bal;
Szélesség: = Rekt. Jobbra - Rect. Bal;
Magasság: = Rekt. Alul - Rect. Top;
Látható: = Igaz;
vég;
vég
vég;

Ezután, amikor elhagyjuk a cellát, el kell rejtenünk a kombinált mezőt:

eljárás TForm1.DBGrid1ColExit (Feladó: TObject);
beginif DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField azután
DBLookupComboBox1.Visible: = Hamis
vég;

Vegye figyelembe, hogy szerkesztési módban az összes billentyűleütés a DBGrid cellájába kerül, de ellenőriznünk kell, hogy elküldjük-e őket a DBLookupComboBox-hoz. A DBLookupComboBox esetében elsősorban a [Tab] gombot érdekli; a bemeneti fókuszt a következő cellába kell mozgatnia.

eljárás TForm1.DBGrid1KeyPress (Feladó: TObject; var Kulcs: Char);
beginif (kulcs = Chr (9)) azután Kijárat;
ha (DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField) thenbegin
DBLookupComboBox1.SetFocus;
SendMessage (DBLookupComboBox1.Handle, WM_Char, word (Key), 0);
vég
vég;

Ha egy elemet ("sort") választ egy DBLookupComboBox-ból, akkor az érték vagy a hozzá tartozó KeyField mezőt a DataField terület.

instagram story viewer