Sdílet prostřednictvím


Možnosti velikosti v ovládacím prvku Windows Forms DataGridView

DataGridView řádky, sloupce a záhlaví můžou změnit velikost v důsledku mnoha různých výskytů. Následující tabulka uvádí tyto výskyty.

Výskyt Popis
Změna velikosti uživatele Uživatelé můžou provádět úpravy velikosti přetažením nebo poklikáním na řádek, sloupec nebo děliče záhlaví.
Změna velikosti ovládacího prvku V režimu výplně sloupce se šířky sloupců změní, když se změní šířka ovládacího prvku; Pokud je například ovládací prvek ukotvený do nadřazeného formuláře a uživatel změní velikost formuláře.
Změna hodnoty buňky V režimech automatické velikosti založené na obsahu se velikosti mění tak, aby odpovídaly novým hodnotám zobrazení.
Volání metody Změna velikosti na základě obsahu programu umožňuje provádět oportunistické úpravy velikosti na základě hodnot buněk v době volání metody.
Nastavení vlastnosti Můžete také nastavit konkrétní hodnoty výšky a šířky.

Ve výchozím nastavení je změna velikosti uživatelem povolená, automatická změna velikosti je zakázaná a hodnoty buněk, které jsou širší než jejich sloupce, jsou zkrácené.

Následující tabulka ukazuje scénáře, které můžete použít k úpravě výchozího chování nebo použití konkrétních možností velikosti k dosažení konkrétních efektů.

Scénář Implementace
Režim výplně sloupce slouží k zobrazení podobně velkých dat v relativně malém počtu sloupců, které zabírají celou šířku ovládacího prvku bez zobrazení vodorovného posuvníku. Nastavte vlastnost AutoSizeColumnsMode na Fill.
Použijte režim výplně sloupce s zobrazovanými hodnotami různých velikostí. Nastavte vlastnost AutoSizeColumnsMode na Fill. Inicializujte relativní šířky sloupců nastavením vlastností sloupce FillWeight nebo voláním metody ovládacího prvku AutoResizeColumns po naplnění ovládacího prvku daty.
Použijte režim výplně sloupce s hodnotami s různou důležitostí. Nastavte vlastnost AutoSizeColumnsMode na Fill. Nastavte velké MinimumWidth hodnoty pro sloupce, které musí vždy zobrazovat některá data, nebo použít jinou možnost nastavení velikosti než režim výplně pro konkrétní sloupce.
Pomocí režimu výplně sloupce se vyhněte zobrazení pozadí ovládacího prvku. Nastavte vlastnost AutoSizeMode posledního sloupce na Fill a pro ostatní sloupce použijte další možnosti velikosti. Pokud ostatní sloupce používají příliš mnoho dostupného místa, nastavte MinimumWidth vlastnost posledního sloupce.
Zobrazí sloupec s pevnou šířkou, například ikonu nebo sloupec ID. Nastavte AutoSizeMode na None a Resizable na False pro sloupec. Inicializujte jeho šířku nastavením vlastnosti Width nebo voláním metody ovládacího prvku AutoResizeColumn po naplnění ovládacího prvku daty.
Upravte velikosti automaticky, kdykoli se změní obsah buňky, abyste se vyhnuli výřezu a optimalizovali využití místa. Nastavte vlastnost automatické velikosti na hodnotu, která představuje režim nastavení velikosti na základě obsahu. Abyste se vyhnuli snížení výkonu při práci s velkými objemy dat, použijte režim nastavení velikosti, který počítá pouze zobrazené řádky.
Upravte velikosti tak, aby odpovídaly hodnotám v zobrazených řádcích, abyste se vyhnuli sankcím za výkon při práci s mnoha řádky. Použijte odpovídající hodnoty výčtu v režimu určení velikosti s automatickou nebo programovou změnou velikosti. Pokud chcete upravit velikosti tak, aby odpovídaly hodnotám v nově zobrazených řádcích při posouvání, zavolejte metodu změny velikosti v obslužné rutině události Scroll. Pokud chcete upravit změnu velikosti při dvojkliku uživatele tak, aby nové velikosti určovaly pouze hodnoty v zobrazených řádcích, zavolejte metodu pro změnu velikosti v obslužné rutině události RowDividerDoubleClick nebo ColumnDividerDoubleClick.
Upravte velikosti tak, aby odpovídaly obsahu buněk pouze v určitých časech. Tím se vyhnete snížení výkonu nebo umožníte uživatelům změny velikosti. Zavolejte metodu přizpůsobení velikosti na základě obsahu v obslužné rutině události. Pomocí události DataBindingComplete můžete například inicializovat velikosti po vazbě, a zpracujte událost CellValidated nebo CellValueChanged, aby se velikosti přizpůsobily úpravám nebo změnám uživatele ve vázaném zdroji dat.
Upravit výšku řádků pro obsah ve víceřádkových buňkách. Zajistěte, aby šířky sloupců byly vhodné pro zobrazení odstavců textu a k úpravě výšky použijte automatickou nebo programovou velikost řádků založenou na obsahu. Také se ujistěte, že buňky s víceřádkovým obsahem jsou zobrazeny pomocí stylu buňky WrapMode s hodnotou True.

Režim automatického nastavení velikosti sloupců obvykle použijete k zachování šířky sloupců nebo jejich nastavení na konkrétní šířky před úpravou výšky řádku.

Změna velikosti pomocí myši

Ve výchozím nastavení můžou uživatelé měnit velikost řádků, sloupců a záhlaví, které nepoužívají režim automatického rozměru založený na hodnotách buněk. Pokud chcete uživatelům zabránit ve změně velikosti pomocí jiných režimů, jako je například režim vyplnění sloupce, nastavte jednu nebo více z následujících vlastností DataGridView:

Uživatelům můžete také zabránit v změně velikosti jednotlivých řádků nebo sloupců nastavením jejich Resizable vlastností. Ve výchozím nastavení je hodnota vlastnosti Resizable založena na hodnotě vlastnosti AllowUserToResizeColumns pro sloupce a hodnotu vlastnosti AllowUserToResizeRows pro řádky. Pokud explicitně nastavíte Resizable na True nebo False, zadaná hodnota však přepíše řídicí hodnotu pro tento řádek nebo sloupec. Pokud chcete dědičnost obnovit, nastavte Resizable na NotSet.

Protože NotSet obnoví dědičnost hodnot, vlastnost Resizable nikdy nevrátí hodnotu NotSet, pokud nebyl řádek nebo sloupec přidán do ovládacího prvku DataGridView. Pokud potřebujete zjistit, jestli je hodnota vlastnosti Resizable řádku nebo sloupce zděděná, zkontrolujte její State vlastnost. Pokud hodnota State obsahuje příznak ResizableSet, hodnota vlastnosti Resizable není zděděna.

Automatické nastavení velikosti

V ovládacím prvku DataGridView existují dva druhy automatického nastavení velikosti: režim výplně sloupců a automatické nastavení velikosti založené na obsahu.

Režim výplně sloupce způsobí, že viditelné sloupce v ovládacím prvku vyplní šířku oblasti zobrazení ovládacího prvku. Pokud potřebujete více informací o tomto režimu, podívejte se na Režim vyplňování sloupců v ovládacím prvku DataGridView pro Windows Forms.

Můžete také nakonfigurovat řádky, sloupce a záhlaví tak, aby automaticky upravovaly jejich velikosti tak, aby odpovídaly obsahu buňky. V tomto případě dojde k úpravě velikosti při každé změně obsahu buňky.

Poznámka:

Pokud udržujete hodnoty buněk ve vlastní mezipaměti dat pomocí virtuálního režimu, dojde k automatické změně velikosti, když uživatel upraví hodnotu buňky. K této změně však nedojde, pokud hodnotu uloženou v mezipaměti upravíte mimo obslužnou rutinu události CellValuePushed. V tomto případě zavolejte metodu UpdateCellValue, která vynutí ovládací prvek aktualizovat zobrazení buňky a použít aktuální režimy automatické velikosti.

Pokud je automatická velikost založená na obsahu povolená jenom pro jednu dimenzi – to znamená pro řádky, ale ne pro sloupce nebo pro sloupce, ale ne řádky– a WrapMode je povolená, úpravy velikosti se také projeví při každé změně ostatních dimenzí. Pokud jsou například řádky, ale ne sloupce nakonfigurované pro automatickou změnu velikosti a funkce WrapMode je povolena, mohou uživatelé přetáhnout rozdělovače sloupců, aby změnili šířku sloupce, a výšky řádků se automaticky upraví tak, aby se obsah buněk stále úplně zobrazil.

Pokud nakonfigurujete řádky i sloupce pro automatickou změnu velikosti založenou na obsahu a WrapMode je povoleno, ovládací prvek DataGridView upraví velikosti pokaždé, když se změní obsah buňky, a při výpočtu nových velikostí použije ideální poměr výšky buňky k šířce.

Chcete-li nakonfigurovat režim změny velikosti pro záhlaví a řádky a pro sloupce, které nepřebíjejí hodnotu ovládacího prvku, nastavte jednu nebo více z následujících vlastností DataGridView:

Chcete-li přepsat nastavení velikosti sloupce ovládacího prvku pro jednotlivé sloupce, nastavte jeho vlastnost AutoSizeMode na hodnotu odlišnou od NotSet. Velikostní režim sloupce je ve skutečnosti určen jeho vlastností InheritedAutoSizeMode. Hodnota této vlastnosti je založena na hodnotě vlastnosti AutoSizeMode sloupce, pokud tato hodnota není NotSet, v takovém případě se zdědí hodnota AutoSizeColumnsMode ovládacího prvku.

Při práci s velkými objemy dat používejte automatickou změnu velikosti na základě obsahu s opatrností. Abyste se vyhnuli zhoršení výkonu, použijte automatické režimy velikosti, které počítají velikosti pouze na základě zobrazených řádků, místo aby analyzovaly každý řádek v ovládacím prvku. Pokud chcete dosáhnout maximálního výkonu, použijte místo toho změnu velikosti prostřednictvím kódu programu, abyste mohli změnit velikost v určitých časech, například okamžitě po načtení nových dat.

Režimy automatického nastavení velikosti založené na obsahu nemají vliv na řádky, sloupce nebo záhlaví, které jste skryli nastavením vlastnosti Visible řádku nebo sloupce nebo ovládacího prvku RowHeadersVisible nebo ColumnHeadersVisible vlastností na false. Pokud je například sloupec skrytý, jakmile se automaticky přizpůsobí velké hodnotě buňky, skrytý sloupec nezmění jeho velikost, pokud se odstraní řádek obsahující velkou hodnotu buňky. Při změně viditelnosti nedojde k automatické změně velikosti, takže změna vlastnosti Visible sloupce zpět na true nebude vynutit, aby přepočítala jeho velikost na základě aktuálního obsahu.

Změna velikosti na základě obsahu programu ovlivňuje řádky, sloupce a záhlaví bez ohledu na jejich viditelnost.

Změna velikosti prostřednictvím kódu programu

Pokud je automatická velikost zakázaná, můžete prostřednictvím kódu programu nastavit přesnou šířku nebo výšku řádků, sloupců nebo záhlaví pomocí následujících vlastností:

Pomocí následujících metod můžete také programově změnit velikost řádků, sloupců a záhlaví tak, aby odpovídaly jejich obsahu:

Tyto metody změní velikost řádků, sloupců nebo hlaviček jednou místo toho, aby je konfigurovaly pro průběžnou změnu velikosti. Nové velikosti se automaticky počítají tak, aby zobrazovaly veškerý obsah buněk bez výřezu. Když programově změníte velikost sloupců, které mají hodnoty vlastností InheritedAutoSizeModeFill, počítané šířky založené na obsahu se použijí k proporcionální úpravě hodnot vlastností FillWeight sloupce, a skutečné šířky sloupců se pak vypočítají podle těchto nových poměrů, takže všechny sloupce vyplní dostupnou oblast zobrazení ovládacího prvku.

Programové změny velikosti jsou užitečné k vyhnutí se výkonovým ztrátám při neustálé změně velikosti. Je také užitečné poskytnout počáteční velikosti pro uživatelem měnitelné řádky, sloupce a záhlaví a pro režim výplně sloupců.

Metody programového změny velikosti se obvykle volají ve specifických časech. Můžete například programově změnit velikost všech sloupců hned po načtení dat nebo můžete změnit velikost konkrétního řádku po úpravě konkrétní hodnoty buňky.

Přizpůsobení chování při změně velikosti na základě obsahu

Chování velikosti můžete přizpůsobit při práci s typy buněk, řádků a sloupců DataGridView odvozených přepsáním metod DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeightnebo DataGridViewColumn.GetPreferredWidth, nebo voláním přetížení chráněných metod pro změnu velikosti v odvozeném ovládacím prvku DataGridView. Přetížení chráněné metody změny velikosti jsou navržena tak, aby fungovala ve dvojicích k dosažení ideálního poměru výšky a šířky buňky a zabránění příliš širokým nebo vysokým buňkám. Pokud například zavoláte AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) přetížení metody AutoResizeRows a předáte hodnotu false pro parametr Boolean, přetížení vypočítá ideální výšky a šířky buněk v řádku, ale upraví pouze výšky řádku. Je pak nutné zavolat metodu AutoResizeColumns a upravit šířky sloupců na ideální hodnoty.

Možnosti velikosti na základě obsahu

Výčty používané vlastnostmi a metodami pro určení velikosti mají podobné hodnoty pro velikost na základě obsahu. Pomocí těchto hodnot můžete omezit, které buňky se používají k výpočtu upřednostňovaných velikostí. U všech výčtů velikosti hodnoty s názvy, které odkazují na zobrazené buňky, omezují výpočty na buňky v zobrazených řádcích. Vyloučení řádků je užitečné, abyste se vyhnuli snížení výkonu při práci s velkým množstvím řádků. Výpočty můžete také omezit na hodnoty buněk v hlavičkových nebo nehlavičkových buňkách.

Viz také