10. Práce s mřížkami

Tato kapitola popisuje jak používat datový ovladač TDBGrid k zobrazování a editaci záznamů datové množiny v tabulkovém formátu mřížky. Tři faktory ovlivňují vzhled zobrazených záznamů v mřížce:

Ovladač mřížky má vlastnost Columns, která je sama objektem TDBGridColumns. TDBGridColumns je kolekce objektů TColumn reprezentující všechny sloupce v ovladači mřížky. Můžeme použít Editor sloupců k nastavování atributů sloupců při návrhu nebo použít vlastnost Columns mřížky pro přístup k vlastnostem, událostem a metodám TDBGridColumns za běhu.
Vlastnost State vlastnosti Columns mřížky indikuje zda pro mřížku existují trvalé objekty sloupců. Columns->State je běhová vlastnost, která je pro mřížku nastavena automaticky. Implicitní stav je csDefault, což znamená, že trvalé objekty sloupců pro mřížku neexistují. V tomto případě zobrazení dat v mřížce je určeno trvalými položkovými komponentami datové množiny nebo pro datovou množinu bez trvalých položkových komponent, implicitní množinou datových zobrazovacích charakteristik.
Tato kapitola se skládá z následujících sekcí:

Použití ovladače mřížky v jeho implicitním stavu

Pokud vlastnost Columns->State mřížky je csDefault, pak vzhled záznamů je určen vlastnostmi položek v datové množině mřížky. Sloupce mřížky jsou dynamicky generovány z viditelných položek datové množiny a pořadí sloupců v mřížce odpovídá pořadí položek v datové množině. Každý sloupec v mřížce je přiřazen k položkové komponentě. Změny vlastností položkových komponent se přímo projeví v mřížce.
Používání ovladače mřížky s dynamicky generovanými sloupci je užitečné pro editaci a zobrazování obsahu libovolných tabulek vybraných za běhu aplikace. Protože struktura mřížky se nenastavuje, může se měnit dynamicky pro zobrazování různých datových množin. Jedna mřížka s dynamicky generovanými sloupci může zobrazovat tabulku Paradoxu a potom ji přepnout na zobrazování výsledku SQL dotazu změnou vlastnosti DataSource mřížky nebo změnou vlastnosti DataSet datového zdroje.
Vzhled dynamických sloupců můžeme měnit při návrhu nebo za běhu aplikace, a to co skutečně měníme jsou odpovídající vlastnosti položkových komponent zobrazených ve sloupci. Vlastnosti dynamických sloupců existují pouze pokud sloupec je přiřazen k jisté položce v jedné datové množině. Např. změnou vlastnosti Width sloupce změníme vlastnost DisplayWidth položky přiřazené k tomuto sloupci. Změny provedené na vlastnostech sloupce, které nejsou založeny na vlastnostech položek, jako je Font, existují pouze během života sloupce.
Vlastnosti dynamických sloupců existují dokud existují přiřazené položkové komponenty. Jestliže datová množina mřížky obsahuje dynamické položkové komponenty, pak položky jsou zrušeny vždy při uzavření datové množiny. Když položkové komponenty jsou zrušeny, pak všechny dynamické sloupce k nim přiřazené jsou zrušeny také. Jestliže mřížka datové množiny obsahuje trvalé položkové komponenty, pak položkové komponenty existují i po uzavření datové množiny a sloupce přiřazené k těmto položkám mohou získat jejich vlastnosti i když datová množina je uzavřena.
Poznámka: Změna vlastnosti Columns->State na csDefault za běhu aplikace zruší všechny objekty sloupců v mřížce (trvalé sloupce) a vytvoří dynamické sloupce na základě viditelných položek datové množiny mřížky.

Vytváření přizpůsobené mřížky

Přizpůsobený ovladač mřížky je ovladač, pro který definujeme trvalé objekty sloupců popisující zobrazení sloupce a zobrazení dat ve sloupci. Přizpůsobená mřížka povoluje konfiguraci více mřížek k prezentaci různých zobrazení stejné datové množiny (např. různé pořadí sloupců, různých položkových voleb a různé barvy a písma). Přizpůsobená mřížka také umožňuje uživateli modifikovat vzhled mřížky za běhu aplikace bez ovlivnění položek použitých v mřížce nebo pořadí položek datové množiny.
Přizpůsobené mřížky se používají pro datové množiny jejich struktura je známa při návrhu. Přestože jména položek zřízených při návrhu existují v datové množině, přizpůsobené mřížky nejsou vhodné k prohlížení libovolné tabulky vybrané za běhu.
Tato sekce se skládá z následujících bodů:
Seznámení s trvalými sloupci
Když vytváříme trvalé objekty sloupců pro mřížku, pak pouze přiřazujeme položky k mřížce datové množiny. Implicitní hodnoty vlastností pro trvalé sloupce jsou dynamicky získány z implicitního zdroje (jako je mřížka nebo přiřazená položka) pokud nepřiřadíme hodnotu vlastnosti sloupce. Pokud nepřiřadíme hodnotu vlastnosti sloupce, pak se její hodnota mění při změně jeho implicitního zdroje.
Např. implicitní zdroj pro nadpis sloupce je určen vlastností DisplayLabel přiřazené položky. Pokud vlastnost DisplayLabel modifikujeme, pak titulek sloupce je bezprostředně změněn.
Po přiřazení hodnoty vlastnostem sloupce, se přestanou projevovat změny implicitního zdroje. Např. jestliže přiřadíme řetězec titulku sloupce, pak titulek sloupce se stane nezávislý na vlastnosti DisplayLabel přiřazené položky. Další změny této vlastnosti již neovlivňují titulek sloupce.
Trvalé sloupce existují nezávisle na položkových komponentách se kterými jsou spojeny. Z tohoto důvodu trvalé sloupce nejsou přiřazeny k objektům položek. Jestliže vlastnost FieldName trvalého sloupce je prázdná, nebo jestliže jméno položky neodpovídá žádnému jménu položky v současné datové množině mřížky, pak vlastnost Field sloupce je NULL a sloupec je složen z prázdných buněk. Prázdný sloupec můžeme použít k zobrazování bitových map nebo jiných grafických údajů. Musíme ale přepsat implicitní zobrazovací metodu buňky.
Dva nebo více trvalých sloupců může být přiřazeno ke stejné položce v datové množině. Např. můžeme zobrazit číselnou položku na obou okrajích mřížky, což usnadní hledání čísla bez nutnosti rolování mřížkou.
Poznámka: Protože trvalé sloupce nemusí být přiřazeny k položkám v datové množině, a protože více sloupců se může odkazovat na stejnou položku, vlastnost FieldCount přizpůsobené mřížky může být menší nebo rovno počtu sloupců mřížky. Pokud současně vybraný sloupec v přizpůsobené mřížce není přiřazen k položce, pak vlastnost SelectedField mřížky je NULL a vlastnost SelectedIndex je -1.
Trvalé sloupce mohou být konfigurovány k zobrazování mřížky buněk jako kombinovaný ovladač s vyhledávanými hodnotami z jiné datové množiny nebo ze statického seznamu, nebo jako tlačítko se třemi tečkami v buňce, které při stisknutí zobrazí prohlížeč speciálních dat nebo zobrazí dialogové okno vztažené k současné buňce.
Tato sekce bude upřesněna v bodech:
Určení zdroje vlastnosti Column za běhu
Za běhu aplikace můžeme testovat vlastnost AssignedValues sloupce k určení zda vlastnost Column získává své hodnoty z přiřazené položkové komponenty nebo zda je přiřazena její vlastní hodnota.
Můžeme znovu nastavit všechny implicitní vlastnosti pro jeden sloupec voláním metody RestoreDefaults sloupce. Můžeme také nastavit implicitní vlastnosti pro všechny sloupce v mřížce voláním metody RestoreDefaults seznamu sloupců:
DBGrid1->Columns->RestoreDefaults();
K přidání trvalého sloupce voláme metodu Add pro seznam sloupců:
DBGrid1->Columns->Add();
K zrušení trvalého sloupce jednoduše uvolníme objekt sloupce:
delete DBGrid1->Columns->Items[5];
Konečně, přiřazením csCustomized do vlastnosti Column->State pro mřížku za běhu aplikace uvedeme mřížku do přizpůsobivého režimu. Všechny existující sloupce v mřížce jsou zrušeny a jsou vytvořeny nové trvalé sloupce pro každou položku v datové množině mřížky.
Vytváření trvalých sloupců
Pro přizpůsobení vzhledu mřížky při návrhu, použijeme Editor sloupců pro vytvoření množiny objektů trvalých sloupců mřížky. Za běhu aplikace vlastnost State mřížky s trvalými objekty sloupců je automaticky nastavena na csCustomized.
K vytvoření trvalých sloupců pro ovladač mřížky:
  1. Vybereme na formuláři komponentu mřížky.
  2. Vyvoláme Editor sloupců dvojitým kliknutím na vlastnost Columns mřížky v Inspektoru objektů.
Seznam Columns zobrazuje trvalé sloupce, které jsou definované pro vybranou mřížku. Když vyvoláme Editor sloupců poprvé, pak tento seznam je prázdný, protože mřížka je ve svém implicitním stavu a obsahuje pouze dynamické sloupce.
Můžeme vytvořit trvalé sloupce pro všechny položky v datové množině najednou nebo můžeme vytvářet trvalé sloupce po jednom. K vytvoření trvalých sloupců pro všechny položky:
  1. Zvolíme v místní nabídce Editoru sloupců Add All Fields. Povšimněte si, že pokud mřížka není přiřazena k žádnému datovému zdroji, pak tato volba je zakázána. Před volbou Add All Fields tedy přiřadíme mřížku k datovému zdroji, který má aktivní datovou množinu.
  2. Pokud mřížka již obsahuje trvalé sloupce, pak jsme dotázáni, zda chceme zrušit existující sloupce nebo je ponechat. Pokud zvolíme Yes, pak všechny existující trvalé sloupce jsou odstraněny a všechny položky v současné datové množině jsou vloženy jako trvalé sloupce na základě jejich pořadí v datové množině. Když zvolíme No, pak existující trvalé sloupce zůstávají a nové sloupce založené na všech položkách v datové množině jsou přidány k množině sloupců.
  3. Stiskem Close aplikujeme trvalé sloupce na mřížku a uzavřeme dialogové okno.
K individuálnímu vytváření trvalých sloupců:
  1. V Editoru sloupců stiskneme tlačítko Add. Nový sloupec je vybrán v seznamu. Nový sloupec je dán pořadovým číslem a implicitním jménem (např. 0 - TColumn).
  2. Pro přiřazení položky k tomuto novému sloupci nastavíme vlastnost FieldName v Inspektoru objektů.
  3. K nastavení titulku pro nový sloupec, nastavíme vlastnost Caption pro vlastnost Title v Inspektoru objektů.
  4. Uzavřeme Editor sloupců k aplikování trvalých sloupců na mřížku.
Rušení trvalých sloupců
Rušení trvalých sloupců v mřížce je užitečné pro eliminaci položek, které nechceme zobrazovat. K odstranění trvalého sloupce z mřížky:
  1. Vybereme odstraňovanou položku v seznamu sloupců.
  2. Stiskneme Delete (můžeme také použít místní nabídku nebo klávesu Del).
Poznámka: Pokud zrušíme všechny sloupce v mřížce, pak vlastnost Columns->State se vrátí do stavu csDefault a automaticky se vytvoří dynamické sloupce pro každou položku v datové množině.
Změna pořadí trvalých sloupců
Pořadí ve kterém jsou sloupce zobrazeny v Editoru sloupců odpovídá pořadí, ve kterém sloupce budou zobrazeny v mřížce. Můžeme změnit pořadí sloupců jejich přetažením myší v seznamu sloupců v Editoru sloupců. Můžeme také změnit pořadí sloupců přetažení sloupce v aktuální mřížce, což lze provést i za běhu aplikace.
Definování vyhledávacích sloupců
Aby sloupec zobrazoval rozbalovací seznam hodnot ze separátní vyhledávací tabulky, musíme definovat objekt vyhledávací položky v datové množině. Když již máme definovanou vyhledávací položku, nastavíme FieldName sloupce na jméno vyhledávací položky a ujistíme se, že ButtonStyle je nastaven na cbsAuto. Mřížka automaticky zobrazuje kombinovaný ovladač, když buňka tohoto sloupce je v editačním režimu. Rozbalovací seznam je zaplněn hodnotami definovanými vyhledávací položkou.
Definování sloupce výběrového seznamu
Sloupec výběrového seznamu vypadá podobně jako vyhledávací sloupec, s tou odchylkou, že položka sloupce je normální položka a rozbalovací seznam je zaplněn seznamem hodnot z vlastnosti PickList sloupce namísto z vyhledávací tabulky.
K definování sloupce výběrového seznamu:
  1. Vybereme sloupec v seznamu sloupců.
  2. Nastavíme ButtonStyle na cbsAuto.
  3. Dvojitě klikneme na vlastnost PickList v Inspektoru objektů k vyvolání editoru seznamu řetězců a zadáme seznam zobrazovaných hodnot.
Poznámka: K návratu sloupce k normálnímu chování, zrušíme všechen text v PickList.
Vložení tlačítka do sloupce
Sloupec může zobrazovat tlačítko se třemi tečkami na pravém okraji buňky. Ctrl+Enter nebo kliknutí myší generuje událost OnEditButtonClick mřížky. Toto tlačítko můžeme použít k zobrazení formuláře obsahujícího podrobný pohled na data sloupce. Např. v tabulce, která zobrazuje souhrn faktur, můžeme použít tlačítko se třemi tečkami ve sloupci faktury k zobrazení prvků této faktury. Pro grafické položky, můžeme použít toto tlačítko k zobrazení obrázku.
K vytvoření tlačítka ve sloupci:
  1. Vybereme sloupec v seznamu sloupců.
  2. Nastavíme ButtonStyle na cbsEllipsis.
  3. Zapíšeme obsluhu události OnEditButtonClick.
Nastavování vlastností sloupce při návrhu
Vlastnosti sloupce určují jak data jsou zobrazena v buňkách tohoto sloupce. Většina vlastností sloupce získá své implicitní hodnoty z vlastností přiřazených k jiným komponentám nazvaným implicitní zdroj, jako je mřížka nebo přiřazená položková komponenta.
K nastavení vlastností sloupce vybereme sloupec v Editoru sloupců a nastavíme jeho vlastnosti v Inspektoru objektů. V následující tabulce jsou uvedeny nejdůležitější vlastnosti sloupce, které můžeme nastavovat:
 
Vlastnost Význam
Alignment Zarovnávání vlevo, vpravo nebo centrování dat položky ve sloupci. Implicitní zdroj: TField::Alignment.
ButtonStyle cbsAuto (implicitně) - Zobrazuje rozbalitelný seznam, pokud přiřazená položka je vyhledávací položka nebo pokud vlastnost PickList sloupce obsahuje data. cbsEllipsis - Zobrazuje tlačítko (...) na pravém okraji buňky. Stiskem tlačítka vyvoláme událost OnEditButtonClick mřížky; cbsNone - Sloupec používá pouze normální editační ovladač k editaci dat ve sloupci.
Color Specifikuje barvu pozadí buněk sloupce. Pro barvu textu se používá vlastnost písma. Implicitní zdroj: TDBGrid::Color.
DropDownRows Počet řádků textu zobrazených v rozbalitelném seznamu. Implicitně: 7.
Expanded Specifikuje, zda sloupec je expandován. Aplikováno pouze na sloupce reprezentující ADT a položková pole.
FieldName Specifikuje jméno položky, která je přiřazena k tomuto sloupci. Může být prázdná.
ReadOnly true - Data ve sloupci nemohou být editována uživatelem; false (implicitně) - Data mohou být editována.
Width Specifikuje šířku sloupce v bodech obrazovky. Implicitní zdroj: TField::DisplayWidth.
Font Specifikuje použité jméno, jeho velikost a barvu pro texty ve sloupci. Implicitní zdroj: TDBGrid::Font.
PickList Obsahuje seznam zobrazovaných hodnot v rozbalovacím seznamu sloupce.
Title Nastavuje vlastnosti pro titulek vybraného sloupce.

Následující tabulka sumarizuje podvlastnosti, které můžeme specifikovat pro vlastnost Title:
 
Vlastnost Význam
Alignment Zarovnávání textu titulku sloupce.
Caption Specifikuje text zobrazený jako titulek sloupce. Implicitní zdroj: TField::DisplayLabel.
Color Specifikuje barvu pozadí použitou k zobrazení buňky titulku sloupce. Implicitní zdroj: TDBGrid::FixedColor.
Font Specifikuje použité písmo, jeho velikost a barvu. Implicitní zdroj: TDBGrid::TitleFont.

Obnovení implicitních hodnot sloupce
Můžeme zrušit změny vlastností provedených v jednom nebo více sloupcích. V Editoru sloupců, vybereme sloupec nebo sloupce k obnovení a v místní nabídce Editoru zvolíme Restore Defaults. Tato volba zruší přiřazená nastavení vlastností a obnoví vlastnosti sloupce na hodnoty odvozené od připojené položkové komponenty.

Zobrazování ADT a položkových polí

V závislosti na hodnotě vlastnosti ObjectView datové množiny, mřížka zobrazuje ADT a položková pole plošně nebo v objektovém režimu, který může být rozbalován a sbalován. Když ObjectView je true, pak objektové položky mohou být rozbalovány a sbalovány. Když položka je rozbalena, pak každá podřízená položka je zobrazována ve svém vlastním sloupci s titulním řádkem, který je pod titulním řádkem samotné položky ADT nebo položkového pole. Při sbalení položky je zobrazen pouze jeden sloupec jako needitovatelný čárkami oddělený seznam řetězců, obsahující podřízené položky. Sloupec může být rozbalen a sbalen kliknutím na šipce na titulním řádku položky a nastavením vlastnosti Expanded sloupce. Když vlastnost ObjectView datové množiny je false, pak každá podřízená položka je zobrazena v samostatném sloupci.
 
Vlastnost Objekt Význam
Expandable TColumn Specifikuje, zda sloupec může být expandován k zobrazení podřízených položek v samostatných, editovatelných sloupcích.
Expanded TColumn Specifikuje, zda sloupec je expandován.
MaxTitleRows TDBGrid Specifikuje maximální počet řádků titulku, který může být zobrazen v mřížce.
ObjectView TDataSet Specifikuje zda položka bude zobrazena plošně nebo v objektovém režimu.
ParentColumn TColumn Ukazuje na objekt TColumn, který vlastní sloupce podřízených položek.

Následující obrázek zobrazuje mřížku s položkou ADT a položkovým polem. Vlastnost ObjectView datové množiny je nastavena na false, takže každá podřízená položka má sloupec.

Další obrázek zobrazuje mřížku s položkou ADT a položkovým polem. Horní obrázek zobrazuje sbalené položky. V tomto stavu je nelze editovat. Spodní obrázek zobrazuje rozbalené položky. Položky můžeme rozbalovat a sbalovat kliknutím na šipce na titulním řádku položky.

Nastavování vlastností mřížky

Vlastnost Options mřížky můžeme použít během návrhu k řízení základů chování a vzhledu mřížky za běhu aplikace. Když komponentu mřížky během návrhu umístíme na formulář, pak vlastnost Options je zobrazena s + (indikace, že tuto vlastnost můžeme rozbalit na řadu logických vlastností, které můžeme nastavovat samostatně). Seznam těchto vlastností je uveden v následující tabulce:
 
Vlastnost Význam
dgEditing true (implicitně) - Povoluje editaci, vkládání a rušení záznamů v mřížce; false - Zakazuje editaci, vkládání a rušení záznamů v mřížce.
dgAlwaysShowEditor true - když je položka vybraná, pak je ve stavu dsEdit; false (implicitně) - Položka se automaticky neuvádí do stavu dsEdit při výběru.
dgTitles true (implicitně) - Zobrazuje jména položek na vrcholu mřížky; false - zobrazování jmen položek je vypnuto.
dgIndicator true (implicitně) - Indikátor sloupce je zobrazen v levé části mřížky a indikátor současného záznamu (šipka nalevo od mřížky) je aktivován na ukazování současného záznamu. Při vkládání se šipka mění na hvězdičku a při editaci na I; false - Indikátor sloupce je vypnut.
dgColumnResize true (implicitně) - U sloupců můžeme měnit šířku tažením rozdělující čáry v hlavičce. Tato změna se projeví na šířce připojené položkové komponenty. false - Šířku sloupce nelze změnit.
dgColLines true (implicitně) - Zobrazuje svislé rozdělovací čáry mezi sloupci; false - Nezobrazuje rozdělující čáry mezi sloupci.
dgRowLines true (implicitně) - Zobrazuje vodorovné rozdělovací čáry mezi záznamy; false - Nezobrazuje vodorovné rozdělovací čáry.
dgTabs true (implicitně) - Povoluje použití tabulátoru pro přechod mezi položkami záznamu; false - Použití tabulátoru opustí ovladač mřížky.
dgRowSelect true - Výběrový řádek je přes celou šířku mřížky; false (implicitně) - Výběrový řádek je zobrazen pouze ve vybrané položce.
dgAlwaysShowSelection true (implicitně) - Výběrový řádek v mřížce je vždy viditelný (i když je zaostřený jiný ovladač); false - Výběrový řádek je viditelný pouze, když mřížka má zaostření.
dgConfirmDelete true (implicitně) - Potvrzování rušení záznamů; false - Záznamy jsou rušeny bez potvrzení.
dgCancelOnExit true (implicitně) - Zrušení provedeného vložení, když zaostření opustí mřížku. Tato volba zabraňuje odesílání částečně vyplněných nebo prázdných záznamů; false - Zabraňuje rušení vkládání.
dgMultiSelect true - Umožňuje uživateli vybírat více řádků; false (implicitně) - není umožněn výběr více řádků.

Editace v mřížce

Za běhu aplikace můžeme použít mřížku k modifikaci existujících dat a zadávání nových záznamů, když jsou splněny následující podmínky: Když uživatel edituje záznam v mřížce, pak změny položek jsou uloženy do interní paměti záznamu, ale nejsou odesílány do databáze pokud nepřejdeme na jiný záznam v mřížce. Když zaostření přejde na jiný ovladač na formuláři, pak mřížka neodesílá změny dokud kurzor datové množiny není přesunut na jiný záznam. Když záznam je odeslán, pak datová množina testuje všechny připojené datové komponenty na změny ve stavu. Pokud vznikají problémy s aktualizací libovolné položky obsahující modifikovaná data, pak C++ Builder generuje výjimku a záznam nemodifikuje.
Všechny změny v záznamu můžeme zrušit stiskem klávesy Esc před přesunem na jiný záznam.

Změna pořadí sloupců během návrhu

V ovladači mřížky s trvalými sloupci a implicitní mřížky, kde datové množiny obsahují trvalé položky, můžeme změnit pořadí sloupců během návrhu kliknutím na titulní buňce sloupce a jejím přetažením do nové pozice v mřížce.
Poznámka: Změna pořadí trvalých položek v Editoru položek také změní pořadí v implicitní mřížce, ale ne v uživatelské mřížce.
Pozor: Nemůžeme ale změnit při návrhu pořadí sloupců v mřížce obsahující dynamické sloupce.

Změna pořadí sloupců za běhu aplikace

Za běhu aplikace může uživatel použít myš k tažení sloupce do nové pozice v mřížce, jestliže její vlastnost DragMode je nastavena na dmManual. Změna pořadí sloupců mřížky, která má vlastnost State nastavenou na csDefault také mění pořadí položkových komponent v datové množině spojené s mřížkou. Pořadí položek ve fyzické tabulce není ovlivněno. Po přesunu sloupce je generována událost OnColumnMoved mřížky.
K zabránění změny pořadí sloupců za běhu aplikace nastavíme vlastnost DragMode mřížky na dmAutomatic.

Řízení zobrazování mřížky

První úroveň řízení zobrazování mřížky je nastavení vlastností sloupců mřížky. Mřížka automaticky použije vlastnosti písma, barvy a zarovnávání sloupce k zobrazování buněk v tomto sloupci. Text datových položek je zobrazován pomocí vlastností DisplayFormat nebo EditFormat položkové komponenty přiřazené ke sloupci. Implicitní zobrazení mřížky můžeme rozšířit kódem obsluhy události OnDrawColumnCell mřížky. Pokud vlastnost DefaultDrawing mřížky je true, pak všechno normální zobrazování je provedeno před voláním obsluhy události OnDrawColumnCell. Náš kód pak může zobrazovat nad implicitním zobrazením. To je obzvláště užitečné, když máme definované prázdné trvalé sloupce a v buňkách těchto sloupců chceme zobrazovat speciální grafiku.
Jestliže chceme nahradit logiku zobrazování celé mřížky, pak nastavíme DefaultDrawing na false a umístíme náš zobrazovací kód do obsluhy události OnDrawColumnCell. Pokud chceme nahradit zobrazovací logiku pouze v jistých sloupcích nebo pro jisté datové typy, můžeme volat DefaultDrawColumnCell z naší obsluhy události OnDrawColumnCell a mřížka tedy pro vybrané sloupce může použít normální zobrazovací kód. Tím omezíme množství práce, pokud chceme změnit např. zobrazování typů položek Boolean.

Reagování na akce uživatele za běhu aplikace

Chování mřížky můžeme modifikovat zápisem obsluh událostí reagujících na specifické akce v mřížce za běhu aplikace. Protože mřížka obvykle zobrazuje mnoho položek a záznamů najednou, můžeme mít velmi specifické požadavky pro reakce na změny v jednotlivých sloupcích. Např. můžeme požadovat aktivaci nebo deaktivaci tlačítka na formuláři vždy při vstupu nebo opuštění jistého sloupce.
Následující tabulka uvádí přehled událostí mřížky dostupných v Inspektoru objektů:
 
Událost Význam
OnCellClick Nastává, když uživatel klikne na buňce v mřížce.
OnColEnter Nastává, když uživatel se přesune do sloupce v mřížce.
OnColExit Nastává, když uživatel opustí sloupec v mřížce.
OnColumnMoved Nastává, když uživatel přemístí sloupec na novou pozici.
OnDblClick Nastává, když uživatel dvojitě klikne v mřížce.
OnDragDrop Nastává, když uživatel dokončí tažení v mřížce.
OnDragOver Nastává, když uživatel provádí tažení nad mřížkou.
OnDrawColumnCell Nastává, když aplikace potřebuje zobrazovat jednotlivé buňky.
OnDrawDataCell (Zastaralé). Nastává, když aplikace potřebuje zobrazit jednotlivé buňky, pokud State je csDefault.
OnEditButtonClick Nastává, když uživatel klikne na tlačítko (...) ve sloupci.
OnEndDrag Nastává, když uživatel ukončí tažení v mřížce.
OnEnter Nastává, když mřížka získá zaostření.
OnExit Nastává, když mřížka ztratí zaostření.
OnKeyDown Nastává, když uživatel stiskne libovolnou klávesu nebo klávesovou kombinaci na klávesnici při zaostření mřížky.
OnKeyPress Nastává, když uživatel stiskne alfanumerickou klávesu na klávesnici při zaostření mřížky.
OnKeyUp Nastává, když uživatel uvolní klávesu při zaostření mřížky.
OnStartDrag Nastává, když uživatel zahájí tažení v mřížce.
OnTitleClick Nastává, když uživatel klikne na titulku sloupce.

Pro tyto události je mnoho použití. Např. můžeme zapsat obsluhu pro událost OnDblClick, která rozbalí seznam, ve kterém uživatel může volit hodnotu zadávanou do sloupce. Tato obsluha může použít vlastnost SelectedField k určení současného řádku a sloupce.

Vytváření mřížek obsahujících další datové ovladače

Ovladač TDBCtrlGrid zobrazuje více položek z více záznamů ve formátu tabulkové mřížky. Každá buňka v mřížce zobrazuje více položek z jednoho řádku. K použití této mřížky:
  1. Umístíme ovladač TDBCtrlGrid na formulář a nastavíme jeho vlastnost DataSource na jméno datového zdroje.
  2. Umístíme individuální datové ovladače do návrhové buňky mřížky. Návrhová buňka pro mřížku je horní levá buňka v mřížce a je to jediná buňka do které můžeme umístit ostatní ovladače.
  3. Nastavíme vlastnost DataField pro každý datový ovladač na jméno příslušné položky. Datový zdroj pro tyto datové ovladače je nastaven na datový zdroj TDBCtrlGrid.
Když přeložíme a spustíme aplikaci obsahující tento typ mřížky, pak uspořádání datových ovladačů nastavené v návrhové buňce, je replikováno v každé buňce mřížky. Každá buňka zobrazuje jiný záznam z datové množiny. Příklad použití této mřížky je uveden na následujícím obrázku.
V následující tabulce jsou uvedeny některé vlastnosti TDBCtrlGrid, které můžeme nastavovat během návrhu:
 
Vlastnost Význam
AllowDelete true (implicitně) - Dovoluje rušení záznamů; false - Zakazuje rušení záznamů
AllowInsert true (implicitně) - Dovoluje vkládání záznamů; false - Zakazuje vkládání záznamů.
ColCount Nastavuje počet sloupců mřížky. Implicitně: 1.
Orientation goVertical (implicitně) - Zobrazování záznamů odhora dolů; goHorizontel - Zobrazuje záznamy zleva doprava.
PanelHeight Nastavuje výšku individuálního panelu. Implicitně: 72.
PanelWidth Nastavuje šířku individuálního panelu. Implicitně: 200.
RowCount Nastavuje počet zobrazovaných panelů. Implicitně: 3.
ShowFocus true (implicitně) - Zobrazuje obdélník zaostření okolo panelu současného záznamu za běhu aplikace; false - nezobrazuje obdélník zaostření.

Více informací o vlastnostech a metodách TDBCtrlGrid nalezneme v nápovědě.


  1. Další aplikace se kterou se seznámíme je aplikace používající TDBGrid a TDBCtrlGrid. Jedná se o již hotovou aplikaci. Nalezneme ji v adresáři Program Files\Borland\CBuilder X\Examples\DBTasks\CtrlGrid. Aplikaci vyzkoušejte a podívejte se jak je vytvořena.Podívejte se jak jsou používány komponenty obou mřížek.
10. Práce s mřížkami