8. Prßce s datov²mi ovladaΦi

Tato kapitola popisuje jak pou╛φvat vizußlnφ datovΘ ovladaΦe k zobrazenφ a editaci dat p°i°azen²ch k tabulkßm a dotaz∙m v na╣ich databßzov²ch aplikacφch. DatovΘ ovladaΦe zφskßvajφ zobrazovanß data od databßzov²ch zdroj∙ z vn∞j╣ku aplikace a takΘ p°φpadn∞ zasφlajφ (vracejφ) datovΘ zm∞ny zp∞t datov²m zdroj∙m.
Tato kapitola popisuje zßkladnφ slu╛by spoleΦnΘ pro v╣echny komponenty datov²ch ovladaΦ∙ a je zde uvedeno jak a kdy pou╛φvat konkrΘtnφ komponenty.

Pou╛φvßnφ spoleΦn²ch slu╛eb datov²ch ovladaΦ∙

Nßsledujφcφ ·lohy jsou spoleΦnΘ pro v∞t╣inu datov²ch ovladaΦ∙: DatovΘ ovladaΦe umis╗ujeme ze strßnky Data Controls Palety komponent na formulß° na╣φ databßzovΘ aplikace. DatovΘ ovladaΦe obecn∞ povolujφ zobrazenφ a editaci polo╛ek dat spojen²ch se souΦasn²m zßznamem v datovΘ mno╛in∞. V nßsledujφcφ tabulce je uveden p°ehled datov²ch ovladaΦ∙.
 
Datov² ovladaΦ Popis
TDBGrid Zobrazuje informace z datovΘho zdroje v tabulkovΘm formßtu. Sloupce v m°φ╛ce odpovφdajφ sloupc∙m v p°ipojenΘ tabulce nebo dotazu. ╪ßdky v m°φ╛ce odpovφdajφ zßznam∙m.
TDBNavigator Poskytuje konfigurovatelnou mno╛inu tlaΦφtek pro navigaci po zßznamech datovΘ mno╛iny, aktualizaci zßznam∙, odesφlßnφ zßznam∙, ru╣enφ zßznam∙, ru╣enφ zm∞n a obnovenφ zobrazenφ dat.
TDBText Zobrazuje data z polo╛ky jako Label.
TDBEdit Zobrazuje data z polo╛ky v editaΦnφm ovladaΦi.
TDBMemo Zobrazuje data z polo╛ky Memo nebo BLOB v rolovatelnΘm vφce°ßdkovΘm editaΦnφm okn∞.
TDBImage Zobrazuje grafiku z datovΘ polo╛ky v grafickΘm ovladaΦi.
TDBListBox Zobrazuje seznam prvk∙, kterΘ m∙╛eme pou╛φt k aktualizaci polo╛ky v souΦasnΘm datovΘm zßznamu.
TDBComboBox Zobrazuje seznam prvk∙, kterΘ m∙╛eme pou╛φt k aktualizaci polo╛ky a takΘ umo╛≥uje p°φm² zßpis hodnoty jako standardnφ datov² editaΦnφ ovladaΦ.
TDBCheckBox Zobrazuje znaΦku, kterß indikuje hodnotu logickΘ polo╛ky.
TDBRadioGroup Zobrazuje mno╛inu vzßjemn∞ vyluΦujφcφch se voleb pro polo╛ku.
TDBLookupListBox Zobrazuje seznam prvk∙ vyhledan²ch z jinΘ datovΘ mno╛iny na zßklad∞ hodnoty polo╛ky.
TDBLookupComboBox Zobrazuje seznam prvk∙ vyhledan²ch z jinΘ datovΘ mno╛iny na zßklad∞ hodnoty polo╛ky a umo╛≥uje takΘ p°φm² zßpis hodnoty jako standardnφ datov² editaΦnφ ovladaΦ.
TDBCtrlGrid Zobrazuje konfigurovatelnou opakovatelnou mno╛inu datov²ch ovladaΦ∙ v m°φ╛ce.
TDBRichEdit Zobrazuje formßtovanß data z polo╛ky v editaΦnφm okn∞.

DatovΘ ovladaΦe zp°φstup≥ujφ data i b∞hem nßvrhu. Kdy╛ nastavφme vlastnost DataSource ovladaΦe na aktivnφ datov² zdroj ve vytvß°enΘ aplikaci, m∙╛eme bezprost°edn∞ vid∞t ╛ivß data v ovladaΦi. Editor polo╛ek m∙╛eme pou╛φt k prochßzenφ datovou mno╛inou b∞hem nßvrhu k ov∞°enφ, zda na╣e aplikace zobrazuje data sprßvn∞ a to bez nutnosti p°ekladu a spu╣t∞nφ aplikace.
Za b∞hu aplikace, datovΘ ovladaΦe takΘ zobrazujφ data a umo╛≥ujφ editaci dat (jestli╛e to povoluje ovladaΦ a databßze, ke kterΘ jsme p°ipojeni).

P°i°azovßnφ datov²ch ovladaΦ∙ k datovΘ mno╛in∞

DatovΘ ovladaΦe p°i°azujeme k datov²m mno╛inßm pomocφ datovΘho zdroje. Komponenta datovΘho zdroje slou╛φ jako propojenφ ovladaΦe a datovΘ mno╛iny obsahujφcφ data. Pro p°i°azenφ datovΘho ovladaΦe k datovΘ mno╛in∞:
  1. Umφstφme komponenty datovΘ mno╛iny a datovΘho zdroje do datovΘho modulu (nebo na formulß°) a nastavφme podle pot°eby jejich vlastnosti.
  2. Umφstφme datovΘ ovladaΦe ze strßnky Data Access Palety komponent na formulß°.
  3. Nastavφme vlastnost DataSource ovladaΦe na jmΘno komponenty datovΘho zdroje z kterΘho chceme zφskßvat data.
  4. Nastavφme vlastnost DataField ovladaΦe na jmΘno zobrazovanΘ polo╛ky (nebo vybereme jmΘno polo╛ky z rozbalovacφho seznamu vlastnosti). Tento krok neprovßdφme pro TDBGrid, TDBCtrlGrid a TDBNavigator, proto╛e p°istupujφ ke v╣em polo╛kßm v datovΘ mno╛in∞.
  5. Nastavφme vlastnost Active datovΘ mno╛iny na true k zobrazenφ dat v ovladaΦi.

Editovßnφ a aktualizace dat

V╣echny datovΘ ovladaΦe mimo navigßtora zobrazujφ data z polo╛ek databßze. M∙╛eme je takΘ pou╛it k editaci a aktualizaci dat, pokud to p°ipojenß datovß mno╛ina umo╛≥uje.
Nßsledujφcφ body popisujφ jak umo╛nit u╛ivateli editaci dat z databßzov²ch polo╛ek pomocφ datov²ch ovladaΦ∙:
Povolenφ editace v ovladaΦi na zßklad∞ vstupu u╛ivatele
Datovß mno╛ina musφ b²t ve stavu dsEdit, aby umo╛nila editaci sv²ch dat. Vlastnost AutoEdit datovΘho zdroje, ke kterΘmu je ovladaΦ p°i°azen urΦuje, zda p°ipojenß datovß mno╛ina zφskß stav dsEdit, kdy╛ data v ovladaΦi jsou modifikovßna v reakci na udßlosti klßvesnice nebo my╣i. Pokud AutoEdit je true (implicitn∞), pak p°i editaci ovladaΦe je automaticky nastaven re╛im dsEdit. Jestli╛e AutoEdit je false, pak p°echod do stavu dsEdit za b∞hu aplikace musφ zajistit ovladaΦ TDBNavigator (nebo n∞co jinΘho).
Editovßnφ dat v ovladaΦi
Vlastnost ReadOnly datovΘho ovladaΦe urΦuje, zda u╛ivatel m∙╛e editovat data zobrazenß ovladaΦem. Mß-li hodnotu false (implicitnφ hodnota), u╛ivatel m∙╛e data editovat. K zabrßn∞nφ editace dat v ovladaΦi nastavφme ReadOnly na true.
To, zda u╛ivatel m∙╛e ·sp∞╣n∞ editovat data v ovladaΦi a zda m∙╛e zm∞ny posφlat zp∞t datovΘ mno╛in∞, urΦujφ takΘ vlastnosti k ovladaΦi p°i°azenΘho datovΘho zdroje a datovΘ mno╛iny. Vlastnost Enabled datovΘho zdroje urΦuje, zda ovladaΦ p°i°azen² k datovΘmu zdroji je schopen zobrazit hodnoty polo╛ek z datovΘ mno╛iny a tedy takΘ urΦuje zda u╛ivatel m∙╛e editovat a posφlat hodnoty zp∞t do datovΘ mno╛iny. Pokud Enabled je true (implicitnφ hodnota), pak ovladaΦ m∙╛e zobrazovat hodnoty polo╛ek. Vlastnost ReadOnly datovΘ mno╛iny urΦuje zda u╛ivatelova editace m∙╛e b²t posφlßna datovΘ mno╛in∞. Je-li false (implicitnφ hodnota), pak zm∞ny jsou posφlßny datovΘ mno╛in∞. P°i hodnot∞ true je datovß mno╛ina urΦena pouze pro Φtenφ.
Poznßmka: Komponenta datovΘ mno╛iny mß vlastnost CanModify (vlastnost p°φstupnß pouze za b∞hu aplikace), kterß urΦuje, zda datovß mno╛ina m∙╛e b²t modifikovßna. CanModify je nastaveno na true, pokud databßze umo╛≥uje zßpis. Pokud CanModify je false, pak datovß mno╛ina je urΦena pouze pro Φtenφ.
Nßsledujφcφ tabulka shrnuje faktory, kterΘ urΦujφ, zda u╛ivatel m∙╛e editovat data v ovladaΦi a posφlat zm∞ny do databßze.
 
Vlastnost ReadOnly datovΘho ovladaΦe
Vlastnost Enabled datovΘho zdroje
Vlastnost ReadOnly datovΘ mno╛iny
Vlastnost CanModify datovΘ mno╛iny
Zßpisov² p°φstup k databßzi
M∙╛eme zapisovat do databßze?
false
true
false
true
Read/Write
ano
false
true
false
false
ReadOnly
ne
false
false
-
-
-
ne
true
-
-
-
-
ne

Ve v╣ech datov²ch ovladaΦφch mimo TDBGrid, kdy╛ modifikujeme polo╛ku, pak modifikace je p°ed opu╣t∞nφm ovladaΦe p°ekopφrovßna do p°i°azenΘ polo╛kovΘ komponenty v datovΘ mno╛in∞. Pokud stiskneme Esc p°ed opu╣t∞nφm ovladaΦe, pak zm∞ny jsou zru╣eny a polo╛ka si ponechß p∙vodnφ hodnotu. V TDBGrid jsou modifikace kopφrovßny pouze p°i p°echodu na jin² zßznam; stisknutφ Esc ru╣φ v╣echny zm∞ny provedenΘ v souΦasnΘm zßznamu.
Kdy╛ zßznam je odeslßn, pak C++ Builder testuje v╣echny datovΘ ovladaΦe p°i°azenΘ k datovΘ mno╛in∞ na stav zm∞n. Pokud n∞kterß polo╛ka mß problΘmy s aktualizacφ, pak C++ Builder generuje v²jimku a zßznam nenφ modifikovßn.

Zakazovßnφ a povolovßnφ zobrazovßnφ dat

Kdy╛ aplikace prochßzφ datovou mno╛inou nebo provßdφ hledßnφ, pak je vhodnΘ doΦasn∞ zabrßnit v zobrazovßnφ hodnot v datov²ch ovladaΦφch p°i zm∞n∞ souΦasnΘho zßznamu. Zßkaz zobrazovßnφ hodnot urychluje prochßzenφ nebo hledßnφ a zamezuje kmitßnφ obrazu. Metoda DisableControls datovΘ mno╛iny zakazuje zobrazovßnφ pro v╣echny datovΘ ovladaΦe p°ipojenΘ k datovΘ mno╛in∞. K op∞tovnΘmu povolenφ zobrazovßnφ volßme metodu EnableControls datovΘ mno╛iny.
Obvykle zakß╛eme zobrazovßnφ p°ed zahßjenφm iteraΦnφho procesu. Samotn² iteraΦnφ proces umφstφme do p°φkazu try ... catch a tak zajistφme op∞tovnΘ povolenφ i p°i v²skytu v²jimky b∞hem zpracovßnφ. V klauzuli catch pak volßme EnableControls (mimo volßnφ EnableControls i za blokem try ... catch). Nßsledujφcφ k≤d ukazuje jak to provΘst.
CustTable->DisableControls();
try
{
  // prochßzenφ v╣emi zßznamy datovΘ mno╛iny
  for (CustTable->First(); !CustTable->EOF; CustTable->Next())
  {
  // Zpracovßnφ ka╛dΘho zßznamu
  ...
  }
}
catch (...)
{
  CustTable->EnableControls();
  throw; // op∞tovnΘ generovßnφ v²jimky
}
CustTable->EnableControls();
Obnovenφ zobrazenφ dat
Metoda Refresh datovΘ mno╛iny vyprazd≥uje lokßlnφ vyrovnßvacφ pam∞ti a obnovuje data pro otev°enou datovou mno╛inu. Tuto metodu m∙╛eme pou╛φt k aktualizaci hodnot zobrazen²ch v datov²ch ovladaΦφch, pokud chceme zφskat aktußlnφ data v p°φpad∞, kdy mohla b²t zm∞n∞na jin²mi aplikacemi, kterΘ majφ k dat∙m soub∞╛n² p°φstup.
Pozor: V n∞kter²ch p°φpadech to ale m∙╛e vΘst k neoΦekßvan²m v²sledk∙m. Nap°. jestli╛e u╛ivatel zobrazuje zßznam zru╣en² jinou aplikacφ, pak v okam╛iku volßnφ Refresh zßznam zmizφ.
Povolenφ udßlostφ my╣i, klßvesnice a ΦasovaΦe
Vlastnost Enabled datovΘho ovladaΦe urΦuje zda ovladaΦ reaguje na udßlosti my╣i, klßvesnice nebo Φasova°e a p°edßvß informace svΘmu datovΘmu zdroji. Implicitnφ nastavenφ tΘto vlastnosti je true. K zabrßn∞nφ udßlostφ my╣i, klßvesnice a ΦasovaΦe v p°φstupu k datovΘmu ovladaΦi, nastavφme jeho vlastnost Enabled na false. Kdy╛ Enabled je false, pak datov² zdroj nezφskßvß informace z datovΘho ovladaΦe. Datov² ovladaΦ pokraΦuje v zobrazovßnφ dat, ale zobrazen² text v ovladaΦi je zaml╛en².

OvladaΦe reprezentujφcφ samostatnou polo╛ku

Mnoho ovladaΦ∙ na strßnce Data controls Palety komponent reprezentuje jednu polo╛ku v databßzovΘ tabulce. V∞t╣ina z t∞chto ovladaΦ∙ se podobß vzhledem a funkΦnostφ standardnφm ovladaΦ∙m Windows, kterΘ umφstφme na formulß°. Nap°. ovladaΦ TDBEdit je datovß verze standardnφho ovladaΦe TEdit, kter² umo╛≥uje u╛ivateli vid∞t a editovat textov² °et∞zec.
Kter² ovladaΦ pou╛ijeme zßvisφ na typu dat (text, formßtovan² text, grafika, logickß informace apod.) obsa╛en²ch v polo╛ce. Nßsledujφcφ body popisujφ tyto komponenty podrobn∞ji:
Zobrazovßnφ dat jako popis
TDBText je ovladaΦ urΦen² pouze pro Φtenφ, kter² se podobß standardnφ komponent∞ TLabel nebo komponent∞ TStaticText. OvladaΦ TDBText je u╛iteΦn² kdy╛ chceme pouze zobrazovat data na formulß°i. Nap°. p°edpoklßdejme formulß° vytvß°en² pro polo╛ky v tabulce zßkaznφk∙ pro zadßvßnφ ulice, m∞sta a stßtu. M∙╛eme pou╛φt dynamickΘ vyhledßvßnφ po╣tovnφho sm∞rovacφho Φφsla pro zadanΘ m∞sto v jinΘ tabulce. Komponenta TDBText pak m∙╛e b²t pou╛ita k zobrazenφ PS╚, kterΘ odpovφdß adrese zadanΘ u╛ivatelem.
TDBText zφskßvß text k zobrazenφ ze specifikovanΘ polo╛ky v souΦasnΘm zßznamu datovΘ mno╛iny. Proto╛e TDBText zφskßvß sv∙j text z datovΘ mno╛iny, text je zobrazovßn dynamicky (text se m∞nφ p°i prochßzenφ zßznamy databßzovΘ tabulky). Tedy nelze specifikovat zobrazovan² text TDBText p°i nßvrhu, jak je to mo╛no provΘst u TLabel nebo TStaticText.
Poznßmka: Kdy╛ umφstφme komponentu TDBText na formulß° a pot°ebujeme zobrazovat data r∙znΘ ╣φ°ky, pak nastavφme jejφ vlastnost AutoSize je true (implicitn∞), k zaji╣t∞nφ zm∞ny velikosti ovladaΦe. Pokud AutoSize je nastaveno na false a ovladaΦ je p°φli╣ mal², pak zobrazenß data jsou o°φznuta.
Zobrazovßnφ a editace polo╛ek v TDBEdit
TDBEdit je databßzovß verze editaΦnφ komponenty. TDBEdit zobrazuje aktußlnφ hodnotu datovΘ polo╛ky, ke kterΘ je p°ipojena a umo╛≥uje editaci pou╛itφm standardnφch technik.
Nap°. p°edpoklßdejme, ╛e CustomersSource je komponenta TDataSource, kterß je aktivnφ a p°ipojena k otev°enΘ TTable nazvanΘ CustomersTable. M∙╛eme pak umφstit komponentu TDBEdit na formulß° a nastavit jejφ vlastnosti takto: DataSource na CustomersSource a DataField na CustNo. EditaΦnφ datovß komponenta bezprost°edn∞ zobrazφ hodnotu ze souΦasnΘho °ßdku sloupce CustNo datovΘ mno╛iny CustomersTable a to jak b∞hem nßvrhu tak i p°i b∞hu aplikace.
Zobrazovßnφ a editace textu pomocφ TDBMemo
TDBMemo je datovß komponenta (podobajφcφ se standardnφ komponent∞ TMemo), kterß m∙╛e zobrazovat data velkΘho binßrnφho objektu (BLOB). TDBMemo zobrazuje vφce°ßdkov² text a umo╛≥uje jej takΘ zadßvat. OvladaΦ TDBMemo m∙╛eme pou╛φt k zobrazovßnφ memo polo╛ek z tabulek dBASE a Paradoxu a textovß data obsa╛enß v polo╛kßch BLOB.
Implicitn∞ TDBMemo umo╛≥uje u╛ivateli editovat memo text. K zabrßn∞nφ editace nastavφme vlastnost ReadOnly ovladaΦe memo na true. K zobrazovßnφ tabulßtor∙ a umo╛n∞nφ u╛ivateli jejich zadßvßnφ do mema, nastavφme vlastnost WantTabs na true. Pro omezenφ poΦtu znak∙, kterΘ u╛ivatel m∙╛e zadat do tΘto polo╛ky, pou╛φvßme vlastnost MaxLength. Implicitnφ hodnota pro MaxLength je 0, co╛ znamenß, ╛e poΦet znak∙ nenφ omezen jinak ne╛ mo╛nostmi operaΦnφho systΘmu.
N∞kolik vlastnostφ ovliv≥uje zobrazovßnφ a zp∙sob zadßvßnφ textu. M∙╛eme °φdit zobrazovßnφ posuvnφk∙ a to pomocφ vlastnosti ScrollBars. K zabrßn∞nφ zalamovßnφ slov nastavφme vlastnost WordWrap na false. Vlastnost Alignment urΦuje jak bude text zarovnßvßn v ovladaΦi. Mo╛nΘ hodnoty jsou: taLeftJustify (implicitn∞), taCenter a taRightJustify. Ke zm∞n∞ pφsma textu pou╛ijeme vlastnost Font.
Za b∞hu aplikace u╛ivatel m∙╛e vyst°ihovat, kopφrovat a vklßdat text z a do ovladaΦe memo. StejnΘ ·lohy m∙╛eme provßd∞t programov∞ pomocφ metod CutToClipboard, CopyToClipboard a PasteFromClipboard.
Proto╛e TDBMemo m∙╛e zobrazit velkΘ mno╛stvφ dat, zobrazovßnφ m∙╛e n∞jakou dobu trvat. K omezenφ pot°ebnΘho Φasu nastavφme vlastnost AutoDisplay (urΦuje, zda zp°φstup≥ovanß data jsou zobrazovßna automaticky). Jestli╛e AutoDisplay je false, pak TDBMemo zobrazφ mφsto aktußlnφch dat jmΘno polo╛ky. Dvojit²m kliknutφm v ovladaΦi pak zobrazφme aktußlnφ data.
Zobrazovßnφ a editace textu v ovladaΦi TDBRichEdit
Datovß komponenta TDBRichEdit (podobß se standardnφ TRichEdit) m∙╛e zobrazovat formßtovan² text ulo╛en² v polo╛kßch BLOB. TDBRichEdit zobrazuje formßtovan² vφce°ßdkov² text a umo╛≥uje u╛ivateli takΘ jeho zadßvßnφ.
Poznßmka: I kdy╛ TDBRichEdit poskytuje vlastnosti a metody k zadßvßnφ a prßci s Rich textem, komponenta neposkytuje u╛ivatelskΘ rozhranφ, k zp°φstupn∞nφ formßtovacφch voleb. Na╣e aplikace musφ implementovat u╛ivatelskΘ rozhranφ k umo╛n∞nφ editace Rich textu.
Implicitn∞ TDBRichEdit umo╛≥uje u╛ivateli editovat memo text. K zabrßn∞nφ editace nastavφme vlastnost ReadOnly ovladaΦe na true. Pro zobrazovßnφ tabulßtor∙ a umo╛n∞nφ jejich zadßvßnφ do ovladaΦe, nastavφme vlastnost WantTabs na true. K omezenφ poΦtu znak∙, kterΘ u╛ivatel m∙╛e zadat do tΘto polo╛ky, pou╛φvßme vlastnost MaxLength. Implicitnφ hodnota pro MaxLength je 0, co╛ znamenß, ╛e poΦet znak∙ nenφ omezen jinak ne╛ mo╛nostmi operaΦnφho systΘmu.
Proto╛e TDBRichEdit m∙╛e zobrazit velkΘ mno╛stvφ dat, zobrazovßnφ m∙╛e n∞jakou dobu trvat. K omezenφ pot°ebnΘho Φasu nastavφme vlastnost AutoDisplay (urΦuje, zda zp°φstup≥ovanß data jsou zobrazovßna automaticky). Jestli╛e AutoDisplay je false, pak TDBRichEdit zobrazφ mφsto aktußlnφch dat jmΘno polo╛ky. Dvojit²m kliknutφm v ovladaΦi pak zobrazφme aktußlnφ data.
Zobrazovßnφ a editace grafick²ch polo╛ek v ovladaΦi TDBImage
TDBImage je datovß komponenta, kterß zobrazuje bitov∞ orientovanou grafiku obsa╛enou v datov²ch polo╛kßch BLOB. Obrßzky BLOB bere z datovΘ mno╛iny a uklßdß je vnit°n∞ ve Windows ve formßtu .DIB. Implicitn∞ TDBImage dovoluje u╛ivateli editovat obrßzek a pou╛φvat operace se schrßnkou. M∙╛eme takΘ pou╛φt vlastnφ editaΦnφ metody p°ipojenΘ k obsluhßm udßlostφ ovladaΦe.
Implicitn∞, ovladaΦ obrßzku zobrazuje tolik grafiky, kolik se vejde do ovladaΦe. M∙╛eme nastavit vlastnost Stretch na true, ke zm∞n∞ velikosti obrßzku tak, aby stßle zapl≥oval ovladaΦ obrßzku i p°i zm∞n∞ jeho velikosti.
Proto╛e TDBImage m∙╛e zobrazovat velkΘ mno╛stvφ dat, zobrazenφ m∙╛e n∞jakou dobu trvat. K omezenφ pot°ebnΘho Φasu nastavφme vlastnost AutoDisplay (urΦuje, zda zp°φstup≥ovanß data jsou automaticky zobrazovßna). Jestli╛e AutoDisplay je false, pak TDBImage zobrazuje mφsto aktußlnφch dat jmΘno polo╛ky. Dvojit²m kliknutφm v ovladaΦi zobrazφme aktußlnφ data.
Zobrazovßnφ a editace dat v seznamech a kombinovan²ch ovladaΦφch
Jsou Φty°i datovΘ ovladaΦe, kterΘ poskytujφ databßzovΘ verze standardnφch ovladaΦ∙ seznamu a kombinovan²ch ovladaΦ∙. Tyto ovladaΦe poskytujφ u╛ivateli mno╛inu implicitnφch datov²ch hodnot k volb∞ za b∞hu.
Poznßmka: Tyto datovΘ ovladaΦe mohou b²t spojeny pouze s datov²mi mno╛inami pro komponenty tabulek (nemohou pracovat s komponentami dotazu).
Nßsledujφcφ tabulka tyto ovladaΦe popisuje.
 
OvladaΦ Popis
TDBListBox Zobrazuje seznam prvk∙, ze kterΘho u╛ivatel m∙╛e aktualizovat polo╛ku v souΦasnΘm zßznamu. Seznam zobrazen²ch prvk∙ je vlastnost ovladaΦe.
TDBComboBox Kombinuje editaΦnφ ovladaΦ se seznamem. U╛ivatel m∙╛e aktualizovat polo╛ku v souΦasnΘm zßznamu volbou hodnoty z rozbalovacφho seznamu nebo zßpisem hodnoty. Seznam zobrazen²ch prvk∙ je vlastnost ovladaΦe.
TDBLookupListBox Zobrazuje seznam prvk∙, ze kterΘho u╛ivatel m∙╛e aktualizovat sloupec v souΦasnΘm zßznamu. Seznam zobrazen²ch prvk∙ je zφskßn z jinΘ datovΘ mno╛iny.
TDBLookupComboBox Kombinuje editaΦnφ ovladaΦ se seznamem. U╛ivatel m∙╛e aktualizovat polo╛ku v souΦasnΘm zßznamu volbou hodnoty z rozbalovacφho seznamu nebo zßpisem hodnoty. Seznam zobrazen²ch prvk∙ je zφskßn z jinΘ datovΘ mno╛iny.

Tato sekce je popsßna v bodech:

Zobrazovßnφ a editace dat v seznamech
TDBListBox zobrazuje rolovateln² seznam prvk∙, ze kterΘho u╛ivatel m∙╛e volit vstup do datovΘ polo╛ky. OvladaΦ seznamu zobrazuje implicitnφ hodnoty pro polo╛ku v souΦasnΘm zßznamu a zv²raz≥uje svoji souΦasnou hodnotu v seznamu. Jestli╛e hodnota polo╛ky souΦasnΘho °ßdku nenφ v seznamu, pak v seznamu nenφ zv²razn∞na ╛ßdnß hodnota. Kdy╛ u╛ivatel vybere prvek seznamu, pak hodnota odpovφdajφcφ polo╛ky v p°ipojenΘ datovΘ mno╛in∞ je zm∞n∞na.
Pomocφ Editoru seznamu °et∞zc∙ m∙╛eme b∞hem nßvrhu vytvo°it ve vlastnosti Items seznam zobrazovan²ch prvk∙. Vlastnost Height urΦuje, kolik prvk∙ je nejednou v seznamu viditeln²ch. Vlastnost IntegralHeight °φdφ zp∙sob zobrazenφ seznamu (mß-li hodnotu true, pak poslednφ prvek seznamu je zobrazen cel², p°i false m∙╛e b²t zobrazen ne·pln²).

Zobrazovßnφ a editace dat v kombinovan²ch ovladaΦφch
TDBComboBox kombinuje funkΦnost editaΦnφho ovladaΦe a seznamu. Za b∞hu aplikace u╛ivatel m∙╛e rozbalit seznam, ve kterΘm m∙╛e vybφrat z p°eddefinovanΘ mno╛iny hodnot, nebo m∙╛e zapsat jinou hodnotu.
Vlastnost Items komponenty specifikuje prvky obsa╛enΘ v seznamu. Tuto vlastnost nastavujeme p°i nßvrhu pomocφ Editoru seznamu °et∞zc∙. Za b∞hu aplikace, pou╛φvßme metody vlastnosti Items k manipulaci se sv²m seznamem °et∞zc∙.
Kdy╛ ovladaΦ je spojen s polo╛kou prost°ednictvφm vlastnosti DataField, pak ovladaΦ zobrazuje hodnotu polo╛ky v souΦasnΘm zßznamu a to bez ohledu na to, zda hodnota se nachßzφ v seznamu prvk∙. Vlastnost Style urΦuje interakce u╛ivatele s ovladaΦem. Implicitn∞ Style je csDropDown, co╛ znamenß, ╛e u╛ivatel m∙╛e zadßvat hodnoty z klßvesnice nebo je volit v seznamu. Nßsledujφcφ vlastnosti urΦujφ, jak seznam Items je zobrazovßn za b∞hu aplikace:

Zobrazovßnφ a editace dat ve vyhledßvacφch seznamech a kombinovan²ch ovladaΦφch
TDBLookupListBox a TDBLookupComboBox jsou datovΘ ovladaΦe, kterΘ odvozujφ seznam prvk∙ od jednoho z t∞chto dvou zdroj∙: V obou p°φpadech, u╛ivatel je omezen seznamem voleb k nastavovßnφ p°φpustn²ch hodnot polo╛ky. Kdy╛ u╛ivatel vybere prvek seznamu, je zm∞n∞na hodnota odpovφdajφcφ polo╛ky v p°ipojenΘ databßzi.
Nap°. p°edpoklßdejme formulß° objednßvky s polo╛kami z tabulky OrdersTable. OrdersTable obsahuje polo╛ku CustNo odpovφdajφcφ identifikaci zßkaznφka, ale OrdersTable neobsahuje ╛ßdnΘ jinΘ informace o zßkaznφkovi. Tabulka CustomersTable obsahuje polo╛ku CustNo odpovφdajφcφ identifikaci zßkaznφka a takΘ obsahuje dal╣φ polo╛ky s informacemi o zßkaznφkovi, jako je firma zßkaznφka, adresa zßkaznφka apod. P°i vypl≥ovßnφ formulß°e objednßvky je obvykle v²hodn∞j╣φ vybφrat firmu zßkaznφka z n∞jakΘho seznamu ne╛ zadßvat identifikaci zßkaznφka. TDBLookupListBox, kter² zobrazuje v╣echna jmΘna firem v tabulce CustomersTable umo╛≥uje u╛ivateli vybrat jmΘno firmy ze seznamu a nastavit sprßvn∞ CustNo na formulß°i objednßvky.
V tΘto sekci jsou uvedeny body: Specifikace seznamu na zßklad∞ vyhledßvacφ polo╛ky
P°i specifikaci seznamu prvk∙ pomocφ vyhledßvacφ polo╛ky, datovß mno╛ina ke kterΘ p°ipojujeme ovladaΦ musφ mφt ji╛ vyhledßvacφ polo╛ku definovßnu. Ke specifikaci vyhledßvacφ polo╛ky pro seznam prvk∙:
  1. Nastavφme vlastnost DataSource seznamu na datov² zdroj pro datovou mno╛inu obsahujφcφ po╛adovanou vyhledßvacφ polo╛ku.
  2. Zvolφme po╛adovanou vyhledßvacφ polo╛ku v rozbalovacφm seznamu vlastnosti DataField.
Kdy╛ aktivujeme tabulku p°i°azenou k vyhledßvacφmu seznamu, pak ovladaΦ zjistφ, ╛e jeho datovß polo╛ka je vyhledßvacφ polo╛ka a zobrazφ p°φslu╣nΘ hodnoty pro vyhledßvßnφ.

Specifikace seznamu na zßklad∞ sekundßrnφho datovΘho zdroje
Pokud pro datovou mno╛inu nemßme definovanou vyhledßvacφ polo╛ku, pak m∙╛eme vytvo°it podobn² vzßjemn² vztah pomocφ sekundßrnφho datovΘho zdroje a hodnoty polo╛ky vracenΘ jako seznam prvk∙. Pro specifikaci sekundßrnφho datovΘho zdroje pro seznam prvk∙:

  1. Nastavφme vlastnost DataSource seznamu na datov² zdroj pro ovladaΦ.
  2. Zvolφme polo╛ku pro vlo╛enφ vyhledan²ch hodnot z rozbalovacφho seznamu vlastnosti DataField. Nesmφme zvolit vyhledßvacφ polo╛ku.
  3. Nastavφme vlastnost ListSource seznamu na datov² zdroj pro datovou mno╛inu, kterß obsahuje polo╛ku jejφ╛ hodnotu chceme vyhledat.
  4. Zvolφme polo╛ku pou╛φvanou jako vyhledßvacφ klφΦ z rozbalovacφho seznamu vlastnosti KeyField. Jsou zde zobrazeny polo╛ky pro datovou mno╛inu p°i°azenou k datovΘmu zdroji specifikovanΘmu v p°edchozφm kroku.
  5. Zvolφme polo╛ku jejφ╛ hodnota bude vracena, v rozbalovacφm seznamu vlastnosti ListField. Jsou zde zobrazeny polo╛ky pro datovou mno╛inu p°i°azenou k datovΘmu zdroji specifikovanΘmu v kroku 3.
Kdy╛ aktivujeme tabulku p°i°azenou k ovladaΦi vyhledßvacφho seznamu, pak ovladaΦ vφ, ╛e seznam prvk∙ je odvozen od sekundßrnφho zdroje a zobrazφ p°φslu╣nΘ hodnoty z tohoto zdroje.

Nastavovßnφ vlastnostφ vyhledßvacφho seznamu a vyhledßvacφho kombinovanΘho ovladaΦe
Nßsledujφcφ tabulka obsahuje seznam d∙le╛it²ch vlastnostφ vyhledßvacφho seznamu a vyhledßvacφho kombinovanΘho ovladaΦe.
 
Vlastnost V²znam
DataField Specifikuje polo╛ku v hlavnφ datovΘ mno╛in∞, kterß poskytuje hodnotu klφΦe pro vyhledßvßnφ ve vyhledßvacφ datovΘ mno╛in∞. Tato polo╛ka je modifikovßna, kdy╛ u╛ivatel vybere prvek seznamu nebo kombinovanΘho ovladaΦe. Pokud DataField je nastavena na vyhledßvacφ polo╛ku, pak vlastnosti KeyField, ListField a ListSource nejsou pou╛ity.
DataSource Specifikuje datov² zdroj pro ovladaΦ. Pokud v²b∞r v ovladaΦi je zm∞n∞n, pak tato datovß mno╛ina je uvedena do stavu dsEdit.
KeyField Specifikuje polo╛ku ve vyhledßvacφ datovΘ mno╛in∞ odpovφdajφcφ DataField. OvladaΦ hledß hodnotu pro DataField v KeyField vyhledßvacφ datovΘ mno╛iny. 
ListField Specifikuje polo╛ku ve vyhledßvacφ datovΘ mno╛in∞ pro zobrazenφ v ovladaΦi.
ListSource Specifikuje datov² zdroj pro sekundßrnφ (vyhledßvacφ) datovou mno╛inu. Po°adφ prvk∙ zobrazen²ch v seznamu nebo kombinovanΘm ovladaΦi je urΦeno indexem specifikovan²m vlastnostφ IndexName vyhledßvacφ datovΘ mno╛iny. Nemusφ to b²t stejn² index jako je pou╛it vlastnostφ KeyField.
RowCount Pouze pro TDBLookupListBox. Specifikuje poΦet °ßdk∙ textu zobrazenΘho v seznamu. V²╣ka ovladaΦe je upravena k p°esnΘmu zapln∞nφ tφmto poΦtem °ßdk∙.
DropDownRows Pouze pro TDBLookupComboBox. Specifikuje poΦet °ßdk∙ textu zobrazenΘho v rozbalovacφm seznamu.

Inkrementßlnφ vyhledßvßnφ hodnoty v seznamu
Za b∞hu aplikace u╛ivatel m∙╛e pou╛φt inkrementßlnφ vyhledßvßnφ k nalezenφ prvku seznamu. Kdy╛ ovladaΦ mß zaost°enφ, pak zßpisem nap°. 'ROB' vybereme prvnφ prvek seznamu zaΦφnajφcφ pφsmeny 'ROB'. Zßpisem dal╣φho 'E' vybereme prvnφ prvek zaΦφnajφcφ 'ROBE', atd. P°i hledßnφ se nerozli╣uje velikost pφsmen. Backspace a ESC ru╣φ souΦasn² vyhledßvacφ °et∞zec.

Zpracovßnφ hodnot polo╛ek pomocφ znaΦek
TDBCheckBox je datov² ovladaΦ znaΦky. M∙╛eme jej pou╛φt k nastavovßnφ hodnot logick²ch polo╛ek v datovΘ mno╛in∞. Nap°. m∙╛eme tφm urΦovat zda souΦasn² zßznam mß nebo nemß n∞jakou vlastnost.
Datov² ovladaΦ znaΦky spravuje sv∙j oznaΦen² nebo neoznaΦen² stav porovnßnφm hodnoty souΦasnΘ polo╛ky s obsahem vlastnostφ ValueChecked a ValueUnchecked. Pokud hodnota polo╛ky odpovφdß vlastnosti ValueChecked, pak ovladaΦ je oznaΦen; kdy╛ polo╛ka odpovφdß vlastnosti ValueUnchecked, pak ovladaΦ je neoznaΦen.
Pozor: Hodnoty vlastnostφ ValueChecked a ValueUnchecked nemohou b²t identickΘ.
Vlastnost ValueChecked nastavφme na hodnotu zasφlanou ovladaΦem do databßze, p°i oznaΦenΘm ovladaΦi, kdy╛ se u╛ivatel p°esune na jin² zßznam. Implicitn∞ tato hodnota je nastavena na true, ale m∙╛eme ji zm∞nit na libovolnou alfanumerickou hodnotu podle pot°eby. M∙╛eme zde takΘ uvΘst seznam hodnot odd∞len²ch st°ednφky. Jestli╛e libovoln² z t∞chto prvk∙ odpovφdß obsahu polo╛ky v souΦasnΘm zßznamu, pak znaΦka je oznaΦena. Nap°. m∙╛eme specifikovat °et∞zec ValueChecked takto:
DBCheckBox1->ValueChecked = "true;Yes;On";
Jestli╛e polo╛ka pro souΦasn² zßznam obsahuje n∞kterou z hodnot: "true", "Yes" nebo "On", pak znaΦka je oznaΦena. P°i porovnßvßnφ °et∞zc∙ se nerozli╣uje velikost pφsmen. Pokud u╛ivatel oznaΦφ znaΦku, kterß mß vφce °et∞zc∙ ValueChecked, pak do databßze je odeslßn prvnφ z nich.
Obdobn∞ pou╛φvßme vlastnost ValueUnchecked. Implicitn∞ jejφ hodnota je false. Vlastnost obsahuje °et∞zce, kterΘ urΦujφ neoznaΦenou znaΦku.
Pokud polo╛ka v souΦasnΘm zßznamu neobsahuje n∞kterou z hodnot °et∞zc∙ ze seznamu z vlastnostφ ValueChecked a ValueUnchecked, pak znaΦka je zakßzßna. Pokud polo╛ka, ke kterΘ je znaΦka p°i°azena je logickß hodnota, pak oznaΦenφ znaΦky je urΦeno p°φmo hodnotou polo╛ky. V tomto p°φpad∞ vlastnosti ValueChecked a ValueUnchecked nemajφ ╛ßdn² efekt.
UrΦenφ hodnot polo╛ky voliΦi
TDBRadioGroup je databßzovß verze ovladaΦe skupiny voliΦ∙. Umo╛≥uje nastavit hodnotu datovΘ polo╛ky ovladaΦi voliΦ∙, kdy╛ je omezen poΦet mo╛n²ch hodnot pro polo╛ku. Skupina voliΦ∙ obsahuje jeden voliΦ pro ka╛dou mo╛nou hodnotu polo╛ky. U╛ivatel m∙╛e nastavit hodnotu datovΘ polo╛ky v²b∞rem urΦenΘho voliΦe.
Vlastnost Items urΦuje poΦet voliΦ∙, kterΘ jsou zobrazeny ve skupin∞. Items je seznam °et∞zc∙. Pro ka╛d² °et∞zec v Items je zobrazen jeden voliΦ a tento °et∞zec je zobrazen napravo od voliΦe jako popis voliΦe.
Jestli╛e aktußlnφ hodnota polo╛ky p°i°azenΘ ke skupin∞ voliΦ∙ odpovφdß hodnot∞ n∞kterΘho °et∞zce ve vlastnosti Items, pak odpovφdajφcφ voliΦ je vybrßn. Nap°. pokud ve vlastnosti Items jsou uvedeny t°i °et∞zce: "Red", "Yellow" a "Blue" a p°φslu╣nß polo╛ka souΦasnΘho zßznamu obsahuje hodnotu "Blue", pak je oznaΦen t°etφ voliΦ.
Poznφmka: Pokud polo╛ka neobsahuje ╛ßdn² °et∞zec z Items, pak voliΦ m∙╛e b²t p°esto vybrßn, jestli╛e obsah polo╛ky odpovφdß °et∞zci ve vlastnosti Values. Jestli╛e hodnota polo╛ky neodpovφdß ╛ßdnΘmu °et∞zci v Items nebo Values, pak ╛ßdn² voliΦ nenφ vybrßn.
Vlastnost Values m∙╛e obsahovat nepovinn² seznam °et∞zc∙, kterΘ mohou b²t vraceny datovΘ mno╛in∞, kdy╛ u╛ivatel vybere voliΦ a ode╣le zßznam. ╪et∞zce jsou p°i°azeny po °ad∞ k voliΦ∙m. Prvnφ °et∞zec je p°i°azen k prvnφmu voliΦi, druh² °et∞zec k druhΘmu voliΦi atd. Nap°. p°edpoklßdejme, ╛e Items obsahuje "Red", "Yellow" a "Blue" a Values obsahuje "Magenta", "Yellow" a "Cyan". Pokud u╛ivatel vybere voliΦ "Red", pak do databßze je odeslßno "Magenta".
Pokud °et∞zce pro Values nejsou poskytnuty, pak do databßze jsou zasφlßny °et∞zce z Items.

Navigovßnφ a manipulace se zßznamy

TDBNavigator poskytuje u╛ivateli jednoduch² zp∙sob pro prochßzenφ zßznamy v datovΘ mno╛in∞ a pro manipulaci se zßznamy. Navigßtor obsahuje °adu tlaΦφtek, kterΘ umo╛≥ujφ u╛ivateli p°ejφt na nßsledujφcφ nebo p°edchozφ zßznam, p°ejφt na prvnφ nebo poslednφ zßznam, vlo╛it nov² zßznam, aktualizovat existujφcφ zßznam, odeslat datovΘ zm∞ny, zru╣it datovΘ zm∞ny, zru╣it zßznam a obnovit zobrazenφ zßznamu.
V╣echna tato tlaΦφtka nemusφ b²t zobrazena v╛dy (viz Volba zobrazenφ tlaΦφtek navigßtora).
V nßsledujφcφ tabulce jsou popsßna tlaΦφtka navigßtora (zleva doprava):
 
TlaΦφtko V²znam
First Volß metodu First datovΘ mno╛iny k nastavenφ souΦasnΘho zßznamu na prvnφ zßznam.
Prior Volß metodu Prior datovΘ mno╛iny k nastavenφ souΦasnΘho zßznamu na p°edchozφ zßznam.
Next Volß metodu Next datovΘ mno╛iny k nastavenφ souΦasnΘho zßznamu na nßsledujφcφ zßznam.
Last Volß metodu Last datovΘ mno╛iny k nastavenφ souΦasnΘho zßznamu na poslednφ zßznam.
Insert Volß metodu Insert datovΘ mno╛iny k vlo╛enφ novΘho zßznamu p°ed souΦasn² zßznam a uvßdφ datovou mno╛inu do stavu dsInsert.
Delete Ru╣φ souΦasn² zßznam. Pokud vlastnost ConfirmDelete je true, pak jsme dotßzßnφ na potvrzenφ p°ed zru╣enφm.
Edit Uvßdφ datovou mno╛inu do stavu dsEdit, co╛ umo╛≥uje modifikaci souΦasnΘho zßznamu.
Post Zapisuje zm∞ny v souΦasnΘm zßznamu do databßze.
Cancel Ru╣φ provedenΘ zm∞ny v souΦasnΘm zßznamu a vracφ datovou mno╛inu do stavu dsBrowse.
Refresh Vyprazd≥uje zobrazovacφ vyrovnßvacφ pam∞ti datov²ch ovladaΦ∙ a potom obnovφ obsah t∞chto vyrovnßvacφch pam∞tφ z fyzickΘ tabulky nebo dotazu. Je to u╛iteΦnΘ, pokud data mohou b²t m∞n∞na jinou aplikacφ.
Volba zobrazenφ tlaΦφtek navigßtora
Kdy╛ p°i nßvrhu umφstφme TDBNavigator na formulß°, pak v╣echna jeho tlaΦφtka jsou viditelnß. Vlastnost VisibleButtons m∙╛eme pou╛φt  k vypnutφ tlaΦφtek, kterΘ nechceme zobrazovat. Nap°. na formulß°i, kter² chceme pou╛φvat k prohlφ╛enφ a ne editovßnφ, m∙╛eme zakßzat tlaΦφtka Edit, Insert, Delete, Post a Cancel.
V tΘto sekci jsou uvedeny body: Skr²vßnφ a zobrazovßnφ tlaΦφtek navigßtora p°i nßvrhu
Vlastnost VisibleButtons v Inspektoru objekt∙ je zobrazena se znakem +, co╛ znamenß, ╛e ji m∙╛eme expandovat k zobrazenφ logick²ch hodnot pro ka╛dΘ tlaΦφtko navigßtora. Viditelnost tlaΦφtka je indikovßna logickou hodnotou. Pokud hodnota je nastavena na true, tak p°φslu╣nΘ tlaΦφtko je zobrazeno.
Poznßmka: P°i nastavenφ na false, tlaΦφtko je z navigßtora na formulß°i odstran∞no a zb²vajφcφ tlaΦφtka jsou roz╣φ°ena tak, aby zaplnily ╣φ°ku ovladaΦe.

Skr²vßnφ a zobrazovßnφ tlaΦφtek navigßtora za b∞hu
Za b∞hu aplikace m∙╛eme skr²vat nebo zobrazovat tlaΦφtka navigßtora v reakci na akce u╛ivatele nebo stavu aplikace. Nap°. p°edpoklßdejme pou╛itφ jednoho navigßtora pro navigovßnφ dvou r∙zn²ch datov²ch mno╛in, jednΘ s mo╛nostφ editace zßznam∙ a druhΘ pouze pro prohlφ╛enφ. Podle toho, kterou datovou mno╛inu navigujeme pot°ebujeme na navigßtoru r∙znß tlaΦφtka. M∙╛eme to zajistit nap°. nßsledujφcφ obsluhou udßlosti:
void __fastcall TForm1::CustomerCompanyEnter(TObject *Sender)
{
  if (Sender == (TObject *)CustomerCompany)
  {
    DBNavigatorAll->DataSource = CustomerCompany->DataSource;
    DBNavigatorAll->VisibleButtons.Clear();
    DBNavigatorAll->VisibleButtons<<nbFirst << nbPrior << nbNext << nbLast;
  }
  else
  {
    DBNavigatorAll->DataSource = OrderNum->DataSource;
    DBNavigatorAll->VisibleButtons << nbInsert << nbDelete << nbEdit
                                   << nbPost << nbCancel << nbRefresh;
  }
}

Zobrazovßnφ nßpov∞dy
K zobrazovßnφ nßpov∞dy pro ka╛dΘ tlaΦφtko navigßtora za b∞hu aplikace, nastavφme vlastnost navigßtora ShowHint na true. Pokud ShowHint je true, pak navigßtor zobrazuje nßpov∞du, kdy╛ se zastavφme kurzorem my╣i nad tlaΦφtkem. ShowHint je implicitn∞ false.
Vlastnost Hints urΦuje texty nßpov∞dy pro v╣echna tlaΦφtka. Implicitn∞ Hints je prßzdn² seznam °et∞zc∙. Kdy╛ Hints je prßzdnΘ,  pak pro ka╛dΘ tlaΦφtko je zobrazovßn implicitnφ text. Pro zadßnφ sv²ch vlastnφch text∙ nßpov∞dy pro navigaΦnφ tlaΦφtka pou╛ijeme Editor seznamu °et∞zc∙ k zadßnφ text∙ pro ka╛dΘ tlaΦφtko ve vlastnosti Hints.
Pou╛itφ jednoho navigßtora pro vφce datov²ch mno╛in
Stejn∞ jako u ostatnφch datov²ch ovladaΦ∙, vlastnost navigßtora DataSource urΦuje datov² zdroj, kter² p°ipojuje ovladaΦ k datovΘ mno╛in∞. Zm∞nou tΘto vlastnosti za b∞hu aplikace m∙╛eme p°ejφt k °φzenφ jinΘ datovΘ mno╛iny.
P°edpoklßdejme formulß° obsahujφcφ dva editaΦnφ ovladaΦe spojenΘ s datov²mi mno╛inami CustomersTable a OrdersTable prost°ednictvφm datov²ch zdroj∙ CustomersSource a OrdersSource. Kdy╛ u╛ivatel pou╛φvß editaΦnφ ovladaΦ p°ipojen² ke CustomersSource, pak vy╛aduje aby navigßtor byl takΘ p°epnut na CustomersSource a kdy╛ pracuje s editaΦnφm ovladaΦem p°ipojen²m k OrdersSource, pak chce aby navigßtor byl takΘ p°epnut na OrdersSource. M∙╛eme vytvo°it obsluhu udßlosti OnEnter pro jeden editaΦnφ ovladaΦ a potom sdφlet tuto obsluhu s ostatnφmi editaΦnφmi ovladaΦi. Nap°.
void __fastcall TForm1::CustomerCompanyEnter(TObject *Sender)
{
  if (Sender == (TObject *)CustomerCompany)
    DBNavigatorAll->DataSource = CustomerCompany->DataSource;
  else
    DBNavigatorAll->DataSource = OrderNum->DataSource;
}

  1. Dal╣φ aplikace, kterou se budeme zab²vat ukazuje jak v databßzovΘ aplikaci pou╛φt vφce formulß°∙. Bude zde takΘ pou╛ita komponenta TDBNavigator. Hlavnφ formulß° na╣φ aplikace je jednoduch². Obsahuje pouze nabφdku a komponentu TDBNavigator. Velikost formulß°e upravφme tak, aby obsahoval pouze tyto komponenty. Vlastnost Name formulß°e zm∞nφme na fmToolBar. Nabφdka obsahuje volby File (s volbou Close), Record (s volbami First, Next, Prior, Last, Delete, Insert a Cancel) a Help (s volbami About a Messages). Formulß° obsahuje nßsledujφcφ ve°ejnΘ metody:

  2. void virtual __fastcall SetNavigator(const TDataSource* ds);
    void __fastcall UpdateMenu();
    Implementace t∞chto metod je:
    void __fastcall TfmToolBar::SetNavigator(const TDataSource* ds)
    {
      if(DBNavigator1->DataSource != ds){
        if(Messages1->Checked)
          ShowMessage(AnsiString("Changing DBNavigator's datasource to ") + ds->Name);
        DBNavigator1->DataSource = (TDataSource*) ds;
        UpdateMenu();
       }
    }
    void __fastcall TfmToolBar::UpdateMenu()
    {
      First1->Enabled = !DBNavigator1->DataSource->DataSet->Bof;
      Next1->Enabled = !DBNavigator1->DataSource->DataSet->Eof;
      Prior1->Enabled = !DBNavigator1->DataSource->DataSet->Bof;
      Last1->Enabled = !DBNavigator1->DataSource->DataSet->Eof;
      Insert1->Enabled=DBNavigator1->DataSource->DataSet->State==dsBrowse;
      Delete1->Enabled=DBNavigator1->DataSource->DataSet->State==dsBrowse;
      Cancel1->Enabled=DBNavigator1->DataSource->DataSet->State==dsEdit ||
                       DBNavigator1->DataSource->DataSet->State==dsInsert;
    }
    Volby v nabφdce tvo°φ p°φkazy: Pro volbu First:
    DM1->Customer->First();
    UpdateMenu();
    Volba Next:
    DM1->Customer->Next();
    UpdateMenu();
    Volba Prior:
    DM1->Customer->Prior();
    UpdateMenu();
    Volba Last:
    DM1->Customer->Last();
    UpdateMenu();
    Volba Delete:
    DM1->Customer->Delete();
    UpdateMenu();
    Volba Insert:
    DM1->Customer->Insert();
    UpdateMenu();
    Volba Cancel:
    DM1->Customer->Cancel();
    UpdateMenu();
    Volba Close: Close();
    Volba About: fmAboutBox->ShowModal();
    Volba Messages: Messages1->Checked = !Messages1->Checked;
    Tφm je hlavnφ formulß° hotov. Ulo╛φme jej do souboru ToolBar.
  3. Pro p°φstup k dat∙m budeme pou╛φvat datov² modul. Vytvo°φme jej volbou File | New Data Module a vlo╛φme do n∞j dv∞ komponenty TTable a dv∞ komponenty TDataSource. Vlastnost Name datovΘho modulu zm∞nφme na DM1 a ulo╛φme jej do souboru DM. U prvnφ TTable nastavφme vlastnost Name na Customer, vlastnost DatabaseName na BCDEMOS, TableName na Customer.DB, vlastnost IndexName na ByCompany a vlastnost Active na True. Prvnφ komponentu TDataSource nazveme CustomerSource a nastavφme u nφ Dataset na Customer.  U druhΘ komponenty TTable to bude obdobnΘ: Name na Orders, DatabaseName na BCDEMOS, TableName na Orders.DB, vlastnost IndexName na CustNo a vlastnost MasterSource na CustomerSource. Dvojit²m kliknutφm na vlastnosti Master Fields zobrazφme dialogovΘ okno Field Link Designer, v obou hornφch seznamech vybereme CustNo a stiskneme tlaΦφtko Add. Tφm mßme definovßnu vazbu mezi tabulkami. U druhΘ TTable nastavφme je╣t∞ Active na true. Druhou TDataSource nazveme OrdersSource a nastavφme u nφ Dataset na Orders. Datov² modul je hotov.
  4. Formulß° fmAboutBox je zobrazen na nßsledujφcφm obrßzku. Neobsahuje ╛ßdn² k≤d a vytvo°te jej tedy sami. Ulo╛te jej do souboru About.

  5. Aplikace je dßle tvo°ena dal╣φm formulß°em. P°idßme tedy k aplikaci dal╣φ formulß°. Zm∞nφme jeho vlastnost Name na fmCustomer, vlastnost Caption na Customer a Visible na true. Vlo╛φme na n∞j komponentu TDBGrid, kterß bude zabφrat v∞t╣inu plochy formulß°e. U TDBGrid nastavφme vlastnost DataSource na DM->CustomerSource. Pro formulß° vytvo°φme je╣t∞ t°i obsluhy udßlostφ: obsluha OnActivate je tvo°ena:

  6. fmToolBar->SetNavigator(DM1->CustomerSource);
    Obsluhu OnCreate tvo°φ:
    fmToolBar->SetNavigator(DM1->CustomerSource);
    a obsluha OnShow obsahuje p°φkaz:
    fmToolBar->UpdateMenu();
    Formulß° je hotov a ulo╛φme jej do souboru CustData.
  7. K aplikaci pat°φ je╣t∞ jeden formulß°. Vytvo°φme jej a zm∞nφme u n∞j Name na fmCustOrd, Caption na Data Navigation a Visible na true. K hornφmu okraji formulß°e vlo╛φme komponentu TDBEdit a nastavφme u nφ DataSource na DM1->CustomerSource a DataField na Company. Zb²vajφcφ plochu formulß°e bude zabφrat TDBGrid u kterΘ nastavφme DataSource na DM1->OrdersSource. Vytvo°φme je╣t∞ dv∞ obsluhy udßlostφ: Obsluha OnActivate formulß°e je tvo°ena p°φkazem:

  8. if(ActiveControl == DBGrid1)
      DBGrid1Enter(NULL);
    a obsluhu OnEnter datovΘ m°φ╛ky tvo°φ p°φkaz:
    fmToolBar->SetNavigator(DM1->OrdersSource);
    Formulß° ulo╛φme do souboru CustOrds. Tφm je na╣e aplikace tΘm∞° hotova. Je nutno vlo╛it je╣t∞ n∞kolik hlaviΦkov²ch soubor∙. DokonΦete jejφ v²voj sami. Zjist∞te, co ovlßdßme volbou Help | Messages?

  9. Podφvßme se je╣t∞ na jednu hotovou aplikaci. Podobß se na╣i p°edchozφ aplikaci (pouze se jednß o MDI aplikaci). Nalezneme ji v adresß°i Program Files\Borland\CBuilder X\Examples\DBTasks\NavMDI. Aplikaci vyzkou╣ejte a podφvejte se jak je vytvo°ena.
8. Prßce s datov²mi ovladaΦi