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