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

DataGridView Řádky, sloupce a záhlaví se můžou měnit 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živatelů povolená, automatická změna velikosti je zakázaná a hodnoty buněk, které jsou širší než jejich sloupce, jsou oříznuté.

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. Inicializace relativní šířky sloupců nastavením vlastností sloupce FillWeight nebo voláním metody ovládacího prvku AutoResizeColumns po vyplnění ovládacího prvku dat.
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. AutoSizeMode Nastavte vlastnost posledního sloupce Fill a použijte další možnosti nastavení velikosti pro ostatní sloupce. 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 sloupec a Resizable na hodnotu FalseNone. Inicializovat jeho šířku Width nastavením vlastnosti nebo voláním metody ovládacího prvku AutoResizeColumn po vyplnění ovládacího prvku dat.
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ě Scroll události. Chcete-li přizpůsobit změnu velikosti poklikáním uživatele tak, aby nové velikosti určily pouze hodnoty v zobrazených řádcích, zavolejte metodu změny velikosti v obslužné rutině RowDividerDoubleClickColumnDividerDoubleClick události.
Upravte velikosti tak, aby odpovídaly obsahu buněk pouze v určitých časech, abyste se vyhnuli sankcím za výkon nebo aby se povolila změna velikosti uživatelů. Volání metody změny velikosti založené na obsahu v obslužné rutině události. Pomocí události můžete například DataBindingComplete inicializovat velikosti po vazbě a zpracovat CellValidated událost CellValueChanged nebo upravit velikosti tak, aby se upravily úpravy nebo změny uživatele ve vázaném zdroji dat.
Umožňuje upravit výšku řádků pro obsah víceřádkových buněk. 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 se buňky s víceřádkovým obsahem zobrazují pomocí WrapMode hodnoty Truestylu buňky .

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 myší

Ve výchozím nastavení můžou uživatelé měnit velikost řádků, sloupců a záhlaví, které nepoužívají režim automatické velikosti na základě hodnot buněk. Pokud chcete uživatelům zabránit v změně velikosti s jinými režimy, například režimem výplně sloupce, nastavte jednu nebo více následujících DataGridView vlastností:

Nastavením jejich Resizable vlastností můžete také uživatelům zabránit v změně velikosti jednotlivých řádků nebo sloupců. Ve výchozím nastavení Resizable je hodnota vlastnosti založena na AllowUserToResizeColumns hodnotě vlastnosti pro sloupce a AllowUserToResizeRows hodnotu vlastnosti pro řádky. Pokud však explicitně nastavíte ResizableTrue hodnotu nebo False, zadaná hodnota přepíše hodnotu ovládacího prvku je pro tento řádek nebo sloupec. Nastavte Resizable na NotSet obnovení dědičnosti.

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

Automatická změna velikosti

Ovládací prvek obsahuje dva druhy automatického nastavení velikosti DataGridView : režim výplně sloupce 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. Další informace o tomto režimu naleznete v části Režim vyplnění sloupce v ovládacím prvku model Windows Forms DataGridView.

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, ale nenastane, když změníte hodnotu uloženou v mezipaměti mimo obslužnou rutinu CellValuePushed události. 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á pouze pro jednu dimenzi – to znamená pro řádky, ale ne pro sloupce nebo pro sloupce, ale ne řádky– a WrapMode je povolená i úprava velikosti, kdykoli se změní ostatní dimenze. Pokud jsou například řádky, ale ne sloupce nakonfigurované pro automatické nastavení velikosti a WrapMode jsou povolené, můžou uživatelé přetáhnout rozdělovače sloupců, aby změnili šířku sloupce a výšky řádků, aby se obsah buňky stále úplně zobrazil.

Pokud nakonfigurujete řádky i sloupce pro automatickou změnu velikosti založené na obsahu a WrapMode povolíte, DataGridView ovládací prvek upraví velikost při každé změně obsahu 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 nastavení velikosti pro záhlaví a řádky a pro sloupce, které nepřepíší hodnotu ovládacího prvku, nastavte jednu nebo více následujících DataGridView vlastností:

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

Při práci s velkými objemy dat používejte automatickou změnu velikosti na základě obsahu s opatrností. Abyste se vyhnuli pokutám za výkon, použijte režimy automatické velikosti, které počítají velikosti pouze na zobrazených řádcích, a ne analyzujte 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 řádku nebo sloupce Visible nebo ovládacího prvku RowHeadersVisible nebo ColumnHeadersVisible vlastností na falsehodnotu . 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 true sloupce Visible zpět na hodnotu nevynutí, 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. Při programové změně velikosti sloupců, které mají InheritedAutoSizeMode hodnoty Fillvlastností , se však počítané šířky založené na obsahu používají k proporcionální úpravě hodnot vlastností sloupce FillWeight a skutečné šířky sloupců se pak počítají podle těchto nových proporcí, aby všechny sloupce vyplnily dostupnou oblast zobrazení ovládacího prvku.

Programová změna velikosti je užitečná, abyste se vyhnuli sankcím za výkon s průběžnou změnou 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 změny velikosti programu se obvykle budou volat v určitý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í při změně velikosti můžete přizpůsobit při práci s odvozenými DataGridView buňkami, řádky a typy sloupců přepsáním DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeightnebo DataGridViewColumn.GetPreferredWidth metodami nebo voláním chráněných přetížení metody změny velikosti v odvozené DataGridView ovládací prvek. Přetížení chráněné metody změny velikosti jsou navržená tak, aby fungovala ve dvojicích, aby dosáhla ideálního poměru výšky buňky k šířce, aby se zabránilo příliš široké nebo vysoké buňce. Pokud například zavoláte AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) přetížení AutoResizeRows metody a předáte hodnotu false parametru Boolean , přetížení vypočítá ideální výšky a šířky buněk v řádku, ale upraví pouze výšku řádků. Pak je nutné volat metodu AutoResizeColumns pro úpravu šířky sloupců na počítaný ideální.

Možnosti velikosti na základě obsahu

Výčty používané vlastnostmi velikosti a metodami mají podobné hodnoty pro změnu velikosti 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 záhlaví nebo nesheaderových buňkách.

Viz také