Delphi - TDBNavigator

DataControls paletta 1. rész

forráskód letöltése
Adatbázist kezelő alkalmazások készítésekor jól kell ismernünk az adatvezérlő és adatmegjelenítő komponenseket.
Következő cikksorozatunkban az adatmegjelenítési komponenseket vesszük sorra. Mindegyikük rendelkezik DataSource, és a megjelenítő komponensek DataField property-vel.
DataSource jellemzőjüket arra az adatforrásra (DataAccess paletta/DataSource) kell irányítanunk, melynek az adatait szeretnénk megjeleníteni. DataField property-ben pedig a megjelenítendőt állíthatjuk be.

Ha mozogni szeretnénk egy adathalmaz rekordjai között, vagy szerkeszteni szeretnénk a rekordokat, akkor vagy magunk írunk ehhez saját gombokra épített eljárásokat, vagy használjuk a felkínált DBNavigator komponenst. Most ez utóbbit mutatjuk be.

A Data Controls palettán található komponens tíz gombot tartalmaz, melyek funkciói balról jobbra haladva a következők:
  • Első rekord (First)
  • Előző rekord (Prior)
  • Következő rekord (Next)
  • Utolsó rekord (Last)
  • Új rekord (Insert)
  • Aktuális rekord törlése (Delete)
  • Szerkesztés (Edit)
  • Küldés (Post)
  • Mégsem (Cancel)
  • Frissítés, az adatforrás újraolvasása (Refresh).
Minden gomb mögött a hozzá rendelt műveletek találhatók.
Pl.: Küldés-Table1.Post, Következő-Table1.Next, Frissítés-Table1.Refresh, Szerkesztés-Table1.Edit...

Miután felraktuk a Form-ra, rá kell állítanunk a DataSource tulajdonságát a megfelelő adatforrásra. Futási időben máris lépkedhetünk a rekordok között, és szerkeszthetjük őket.

Ha nincs szükség minden gombra, akkor a VisibleButtons tulajdonságban már szerkesztési időben is beállíthatjuk a megjelenítendő gombokat. Ehhez az Object Inspector-ban a gombot True-ra (látszik), vagy False-ra (nem látszik) kell állítani.
A példában ezek ki-, és bekapcsolását külön gombokkal végezzük.

Ha igazra állítjuk a ShowHint tulajdonságot, akkor az alkalmazás futtatásakor az egérrel a gombok fölé állva, angolul jelenik meg a nevük. Ezt egyszerűen átállíthatjuk magyarra, ha a Hints tulajdonságban található angol szöveget kitöröljük, és helyükre írjuk magyar megfelelőjüket. Vigyázzunk a sorrendre! A Delphi3-ban még a következőkre figyeljünk: ha letiltottuk valamelyik gomb megjelenítését a VisibleButtons-ban, akkor a Hints-ben a kihagyott gomb helyére üres sort kell írnunk. Különben a feliratok elcsúsznak, és az angol szöveg jelenik meg. A négyes Delphi-ben erre már nem kell ügyelnünk.

A megjelenítéssel kapcsolatos jellemző a Flat. Igaz állapotban a navigátor sor "belesimul" a környezetébe (sík), hamis állapotban kiemelkedik belőle.

A rekordtörléssel kapcsolatos tulajdonság a ConfirmDelete. Alapállapotban igazra van állítva. Ekkor minden törléskor megjelenik egy biztonsági kérdés "Delete record?" felirattal, és csak akkor kerül törlésre az aktuális rekord, ha Ok-kal lépünk ki belőle. Ha azt akarjuk, hogy a rekord azonnal, kérdés nélkül törlődjön, akkor a ConfirmDelete legyen False.

Fontos metódus a BtnClick. Akkor alkalmazzuk, ha szimulálni szeretnénk a navigátor gombkattintását, anélkül hogy valóban kattintanánk az egérrel. A gombok TNavigateBtn típusúak, a nevükkel hivatkozhatunk rájuk. Pl.: DBNavigator1.BtnClick(nbcancel).

A Navigátorsor OnClick eseményében reagálhatunk a kattintásokra. Az eseménynek van egy Button paramétere, mely TNavigateBtn típusú. Ebben kapjuk vissza a választott gombot.
A példában, ha az Insert (+) gombra kattintunk, akkor az OnClick esemény megjelenít egy MessageDlg ablakot, melyből ha nemleges válasszal lépünk ki, akkor szimulálja a Cancel gombkattintást.
Az OnClick esemény a kattintás után következik be, így csak utólag tudjuk lereagálni a kattintást.

Ha még a kattintás által kezdeményezett "akció" bekövetkezése előtt szeretnénk reagálni, akkor használjuk a BeforeAction eseményt. Ez még az előtt kerül végrehajtásra, mielőtt a Navigátor elindítaná a gombhoz rendelt folyamatokat. Hasonlóan az OnClick-hez, neki is van egy Button paramétere, melyben a lenyomott gombot kapjuk vissza.
A példában csak akkor törölhetünk, ha a BeforeAction esemény által megjelenített MessageDlg ablakból igennel lépünk ki. Ahhoz, hogy saját üzenet esetén ne jelenjen meg a Navigátor biztonsági kérdése is, át kell állítani a ConfirmDelete jellemzőjét hamisra.

DataControls paletta cikksorozat