Már eddigi példaprogramjainkban is felhasználtunk néhányat az adatmegjelenítési komponensek közül, ideje hát hogy mélyrehatóbban is megismerkedjünk velük.

Az adatelérési komponensek a Data Controls palettán találhatóak meg. Ezek a komponensek egy adathalmaz adatainak megjelenítésére és szerkesztésére szolgálnak. Az adatelérési és adatmegjelenítési komponensek nem tudnak közvetlenül egymáshoz kapcsolódni. Ahhoz hogy egy adatelérési komponens által reprezentált adatokat meg tudjuk jeleníteni egy adatmegjelenítési komponenssel, szükség van az ún. DataSource (adatforrás) komponensre. Először a DataSource kapcsolódik egy adatforrás komponenshez, majd ezután egy adatmegjelenítési komponens DataSource property-ét tudjuk ráállítani az adatforrásunkra. (A DataSource komponensről bővebb információ a negyedik részben található)

Tehát minden adatelérési komponens rendelkezik DataSource property-vel, amiben azt az adatforrást kell beállítanunk, amely által szolgáltatott adatokat meg akarjuk jeleníteni az adott adatelérési komponens segítségével. Az adatelérési komponensek nagy részének fontos property-je még a DataField property, mellyel azt állítjuk be, hogy az adott adathalmaz melyik mezőjének értékét jelenítse meg. Általában e két tulajdonság beállítása után, már meg is jelenik az adat az adott komponensben. Majdnem minden adatelérési komponens rendelkezik még a ReadOnly tulajdonsággal, mely segítségével letilthatjuk az adott komponensben az adatok szerkesztését. Most sorra vesszük az adatelérési komponenseket, de nem teljes részletességgel, hiszen nagyon sok tulajdonságukban teljesen megegyeznek a nem adatbázisos megfelelőikkel, inkább csak a fontos és eltérő tulajdonságokat nézzük meg.

DBGrid

A DBGrid segítségével táblázatos formában jeleníthetőek meg egy adatforrás rekordjai. Csak a DataSource property-t kell beállítani, és már láthatóvá is válnak az adott adatforrás által szolgáltatott adatok. (abban az esetben, ha az adathalmaz aktív és az adatforrás rá van állítva)

A komponens fontos tulajdonsága a Columns, mellyel mezőket vehetünk fel a gridbe, törölhetünk onnan, megváltoztathatjuk a mezők sorrendjét az adathalmazban lévő sorrendtől eltérőre, beállíthatjuk, hogy az adott mezőben az értékek merre legyenek igazítva, beállíthatjuk a mező megnevezését, stb. A columns property-n kattintva, vagy a DBGriden jobb gombot nyomva és a Columns Editort választva jön be a mezőszerkesztő, ahol az említett beállítások elvégezhetőek. (Amennyiben egyetlen mezőt sem veszünk fel, úgy a DBGrid az összes mezőt megjeleníti.)

Jobb gombbal klikkelve a DBGridre (vagy duplán a bal gombbal), behozhatjuk a Columns Editort, melynek segítségével mezőket vehetünk fel a gridbe, törölhetünk belőle, és a mezőobjektumok különböző tulajdonságait állíthatjuk be.

Nézzük egy mezőobjektum fontosabb tulajdonságait:
 

Property Leírás
Alignment Az adatok igazítása a mezőben
ButtonStyle Ha szerkeszthető a cella, akkor beállíthatjuk az adott cella tulajdonságát úgy, hogy egy Elipsis Button jelenjen meg benne, mellyel pl. egy másik beviteli űrlapot jelenítünk meg, vagy egy legördülő menü jelenjen meg, melyből előre definiált értékek közül választhatunk, hogy mit akarunk felvinni a cellába, illetve az adott rekord adott mezőjébe.
Color A mező színe.
PickList Ha a ButtonStyle=cbsAuto, akkor az ide felvitt elemek megjelennek egy legördülő menüben az adott mező egy cellájának szerkesztésekor.
ReadOnly Ha true, a mező csak olvasható
Title A mező fejlécének tulajdonságainak beállítására szolgál.
Visible Ha false, a mező nem látható.
Width A mező szélessége.

A DBGrid másik fontos property-je az Options. Itt az Egész táblázatra vonatkozó beállításokat eszközölhetünk.

A következő dolgokat állíthatjuk be a segítségével:
 

DgEditing Ha false nem szerkeszthetők az adatok a DbGridben.
DgAlwaysShowEditor Ha true, az grid állandóan szerkesztési módban van, így nem kell az Enter-t vagy az F2-t leütni szerkesztés előtt.
DgTitles Azt lehet vele beállítani, hogy megjelenjenek-e a mezőnevek a táblázat tetején vagy pedig ne.
DgIndicator Megjelenjen-e a legelső oszlop előtti keskeny sáv, amiben egy kis kurzor található.
DgColumnResize Át lehessen-e méretezni és mozgatni az oszlopokat.
DgColLins Azt állítja be, hogy a sorok között legyenek-e vonalak.
DgRowLines Azt állítja be, hogy az oszlopok között legyenek-e vonalak.
DgTabs Ha true akkor Tab billentyű hatására a következő oszlopba lép, egyébként a következő kontrolra az űrlapon.
DgRowSelect Ha true, csak teljes sor jelölhető ki.
DgConfirmDelete Ha true, törlés előtt megjelenik egy dialógusablak, melyben meg kell erősítenünk, hogy tényleg törölni akarjuk az adott rekordot.
DgCancelOnExit Új rekord felvitelekor, ha nem viszünk fel egyik mezőbe sem adatot, akkor nem veszi fel az üres rekordot a táblába. 
DgMultiSelect Ha true, akkor több sor is kijelölhető egyszerre.

DBNavigator

A DBNavigator komponens vezérlőgombokat tartalmaz, mellyel a felhasználó egy adathalmaz rekordjain lépkedhet, az első vagy az utolsó rekordra léphet, új rekordot vihet fel, illetve meglévőt törölhet stb. Természetesen a DBNavigator gomb esetében is az első amit be kell állítanunk az a DataSource property. A Hints property segítségével egy string listában minden egyes gombra, beállíthatjuk, hogy mi jelenjen meg útmutatásként, ha az egeret az adott gomb fölé visszük. Ahhoz hogy a hintek megjelenjenek, a Showhint property-t true-ra kell állítani. Ha a ConfirmDelete property igaz, akkor a törlés gombot megnyomva egy dialógusablak jelenik meg, ahol meg kell hogy erősítsük törlési szándékunkat. A VisibleButtons property segítségével azokat a gombokat el tudjuk tüntetni, amelyekre nincs szükségünk az adott feladathoz.

DBText

A DBText komponens a Label komponens adatbázisos megfelelője. Egy rekord egy mezőjének megjelenítésére szolgál. A Datasource és a DataField property-t kell beállítanunk, ahhoz hogy megjelenjen az adat a komponensben. Ezeket a tulajdonságokat leszámítva, nem rendelkezik a Label komponenstől eltérő, speciális tulajdonságokkal.

DBEdit

A standard Edit komponens adatbázisos változata. Segítségével egy rekord egy mezőjét szerkeszthetjük. A DBText-hez hasonlóan az ott ismertetett két property-n kívül nem rendelkezik az Edit komponenstől eltérő, speciális adatbázisos tulajdonságokkal.

DBMemo

Hosszabb szövegek megjelenítésére, szerkesztésére szolgál, a Memo komponens adatbázisos változata.

DBImage

A DBImage segítségével BLOB (Binary Large Object) típusú mezőben tárolt képeket tudunk megjeleníteni. A megjelenítésen kívül meg is változtathatjuk a képet, mégpedig úgy, hogy vagy a clipboard-ról szúrjuk be, vagy pedig a Picture Property-t használjuk fel egy kép betöltésesre.

A következő kis kód egy képet tölt be a DBImage-be:

DBImage1.Picture.LoadFromFile(`kep1.bmp');

A Center property-vel azt állíthatjuk be, hogy a kép a DBImage közepén helyezkedjen-e el, a Stretch property-vel pedig kihúzhatjuk a képet a DBImage méretének megfelelően, ha az kisebb nála.

DBListBox

A DBListBox segítségével a DataField property-ben beállított mező szerkeszthető át, mégpedig úgy hogy a mező a DBListBox-ban kijelölt értéket veszi fel. A listából választható elemeket az Items property-ben állíthatjuk be szerkesztési időben vagy pedig programból. A DBListBox-ban nem jelenik meg a mező aktuális értéke, ezért ha azt is látni szeretnénk, akkor pl. helyezzünk egy DBEdit vagy DBText komponenst a DBListBox fölé.

DBComboBox

A DBComboBox komponenst használva egy legördülő listából választhatjuk ki azt az elemet, amivel fel akarjuk tölteni az aktuális rekord megfelelő mezőjét. A mezőt a már jól ismert DataField proprty segítségével tudjuk beállítani. A választható elemek listáját az Items property-ben kell megadnunk. A komponens mindig a mező aktuális értékét mutatja, és a legördülő listából választhatjuk ki az új értéket, amivel le akarjuk cserélni az aktuálisat, illetve új rekord esetén innen tudjuk felvinni a kívánt elemet.

DBCheckBox

A DBCheckBox jól használható olyan esetben, amikor logikai adatokat (pl. Igen/Nem) kell megjelenítenünk a képernyőn. A ValueChecked property-ben adhatjuk meg azt az értéket, ami a DBCheckBox kijelölt állapotát jelenti. Tehát ha pl. DBCheckBox1.ValueChecked:='I', akkor ha új rekordot viszünk fel és a DBCheckBox-ot bejelöljük akkor a beállított mezőbe (DataField property) egy ‘I' betű fog belekerülni. Ha tallózunk egy adathalmaz rekordjai között, akkor abban az esetben fog a DBCheckBox-unk kijelölté válni, ha az adott rekord megfelelő mezőjében ‘I' betű van, minden más esetben üres marad. A ValueUnChecked property beállításával azt is megadhatjuk, hogy mi jelentse a nem kijelölt állapotot. Abban az esetben, ha mindkét előbb említett property-t beállítottuk, és az aktuális rekord adott mezője sem a ValueChecked-ben sem a ValueUnCheckedben beállított értéket nem tartalamazza, akkor határozatlan állapotban van és DBCheckbox beszürkítve jelenik meg.

Lehetőség van arra is, hogy több érték is egy állapotot jelentsen, ezt a következőképpen lehet megadni:

DBCheckBox1.ValueChecked := `On;Yes;True';

DBRadioGroup

A komponens hasonlóan működik a DBComboBox-hoz, a kiválasztott elemnek megfelelő értéket lehet vele felvinni az adott táblába. Azért írtam hogy kiválasztott elemnek megfelelő értéket, mert külön állíthatjuk be a képernyőn megjelenő elemeket (Items property) és azt az értéket amit felvisz egy táblába (Values property) ha az adott elemet kiválasztjuk.

Tehát ha pl. az Items property-ben beállítjuk a következőket:

Kicsi
Közepes
Nagy

és a Values property-ben ezeket az értékeket:

S
M
L
akkor ha kiválasztjuk pl. a Közepes elemet a DBRadioGroup-ból, akkor a megfelelő mezőbe csak egy 'M' betű kerül. A mezőt itt is a szokásos DataField property-vel állíthatjuk be.

DBLookupListBox, DBLookupComboBox

Tegyük fel, hogy egy tábla egy mezőjét egy másik táblából választott értékkel szeretnénk feltölteni, nem pedig előre meghatározott elemekkel, ahogyan azt a DBListBox-nál illetve a DBComboBox-nál láttuk.

Nézzünk erre egy példát. Van két táblánk, az egyik a megrendeléseket tartalmazza, a másik a szállítókat. Ha egy új megrendelést készítünk, a rendelések táblába fel kell vennünk azt a szállítót, akitől az árut meg akarjuk rendelni. Tovább bonyolítja a helyzetet, hogy normalizálási szempontból nem lenne célszerű a szállító teljes nevét bele tenni a rendelések táblába, inkább csak egy pár karakterből álló kódot kellene használnunk. Tehát a képernyőn meg kell jelenítenünk egy listát ami a szállítók nevét tartalmazza és ha ott kiválaszt egyet a felhasználó, akkor a kiválasztott szállító kódját kell a rendelések tábla megfelelő mezőjébe írnunk. Ez a feladat a hagyományos DBListBox-al illetve DBComboBox-al nem lenne olyan egyszerű, ellenben a fenti két komponens segítségével nagyon könnyen megvalósítható, mindössze néhány property-t kell beállítnunk.

Lássuk melyek ezek:
 

DataSource Annak a táblának az adatforrása, aminek egy mezőjét fel akarjuk tölteni egy másik táblából származó értékkel.
DataField Annak a mezőnek a neve, amit fel fogunk tölteni.
ListSource Annak a táblának az adatforrásának a neve, amelyből az adatot vesszük.
ListField Itt állíthatjuk be, hogy mely mezők jelenjenek meg a listában. Ha több mezőt is meg szeretnénk jeleníteni, akkor azokat ‘;'-vel kell elválasztani.
KeyField Annak a mezőnek a neve, aminek értékét be fogjuk írni a kiválasztott rekordból.

DBCtrlGrid

Segítségével egyéni, scrollozható táblázatokat hozhatunk létre, mégpedig úgy hogy ennek a táblázatnak egy sorában tetszőleges adatelérési komponenseket helyezünk el. A DBCtrlGrid első sorában tudjuk kialakítani azt, hogy hogyan is nézzenek ki a sorok, a többit ennek mintájára fogja ismételni a komponens. Tehát ha pl. elhelyezünk itt két DBEdit és egy DBComboBox komponenst, akkor a DBCtrlGridben minden egyes sorban az itt beállított kontrolokban fognak megjelenni az aktuális rekord adatai. A DataSource property tartalmazza azt az adatforrást, amely által szolgáltatott adatokat meg akarjuk jeleníteni. A PanelHeight tulajdonsággal egy sor hosszát, a PanelWidth-tel pedig szélességét határozhatjuk meg. A ColCount property-vel a sorok, a RowCount-tal pedig az oszlopok számát tudjuk beállítani.

A képen egy DBCtrlGrid látható, amelyen egy DBGrid és egy DBComboBox van elhelyezve.

A következő részben egy komolyabb, összetettebb példafeladaton keresztül ismételjük át az eddig tanultakat.