Storleksalternativ i Windows Forms DataGridView-kontrollen

DataGridView rader, kolumner och rubriker kan ändra storlek på grund av många olika förekomster. I följande tabell visas dessa förekomster.

Förekomst Beskrivning
Anpassa användargränssnittets storlek Användare kan göra storleksjusteringar genom att dra eller dubbelklicka på rad-, kolumn- eller sidhuvuddelare.
Ändra storlek på kontrollelement I kolumnfyllningsläge ändras kolumnbredden när kontrollbredden ändras. Till exempel när kontrollen dockas till dess överordnade formulär och användaren ändrar storlek på formuläret.
Ändring av cellvärde I innehållsbaserade automatiska storlekslägen ändras storlekarna så att de passar nya visningsvärden.
Metodanrop Med programmatisk innehållsbaserad storleksändring kan du göra opportunistiska storleksjusteringar baserat på cellvärden vid tidpunkten för metodanropet.
Inställning av egenskaper Du kan också ange specifika höjd- och breddvärden.

Som standard är användarens storleksändring aktiverad, automatisk storleksändring inaktiveras och cellvärden som är bredare än deras kolumner klipps bort.

I följande tabell visas scenarier som du kan använda för att justera standardbeteendet eller för att använda specifika storleksalternativ för att uppnå särskilda effekter.

Scenarium Genomförande
Använd kolumnfyllningsläget för att visa data med liknande storlek i ett relativt litet antal kolumner som upptar hela kontrollens bredd utan att visa den vågräta rullningslisten. Ange egenskapen AutoSizeColumnsMode till Fill.
Använd kolumnfyllningsläge med visningsvärden av varierande storlekar. Ange egenskapen AutoSizeColumnsMode till Fill. Initiera relativa kolumnbredder genom att ange kolumnegenskaperna FillWeight eller genom att anropa kontrollmetoden AutoResizeColumns när kontrollen har fyllts med data.
Använd kolumnfyllningsläge med värden av varierande betydelse. Ange egenskapen AutoSizeColumnsMode till Fill. Ange stora MinimumWidth värden för kolumner som alltid måste visa en del av sina data eller använda ett annat storleksalternativ än fyllningsläge för specifika kolumner.
Använd kolumnfyllningsläget för att undvika att visa kontrollbakgrunden. Ange egenskapen för AutoSizeMode den sista kolumnen till Fill och använd andra storleksalternativ för de andra kolumnerna. Om de andra kolumnerna använder för mycket av det tillgängliga utrymmet anger du egenskapen för MinimumWidth den sista kolumnen.
Visa en kolumn med fast bredd, till exempel en ikon eller en ID-kolumn. Ange AutoSizeMode till None och Resizable till False för kolumnen. Initiera dess bredd genom att ange Width egenskapen eller genom att anropa kontrollmetoden AutoResizeColumn när kontrollen har fyllts med data.
Justera storlekar automatiskt när cellinnehållet ändras för att undvika urklipp och för att optimera användningen av utrymme. Ange en egenskap för automatisk storleksändring till ett värde som representerar ett innehållsbaserat storleksläge. Om du vill undvika prestandastraff när du arbetar med stora mängder data använder du ett storleksläge som endast beräknar rader som visas.
Justera storlekar så att de passar värdena i de rader som visas för att undvika prestandapåföljder när du arbetar med många rader. Använd lämpliga uppräkningsvärden för storleksläge med automatisk eller programmatisk storleksändring. Om du vill justera storlekar så att de passar värden i nyligen visade rader under rullning anropar du en storleksändringsmetod i en Scroll händelsehanterare. För att anpassa användarens dubbelklick för storleksändring så att endast värden i de visade raderna avgör de nya storlekarna, anropar du en storleksändringsmetod i en RowDividerDoubleClick-händelsehanterare eller en ColumnDividerDoubleClick-händelsehanterare.
Justera storlekarna så att de endast passar cellinnehållet vid specifika tidpunkter för att undvika prestandapåföljder eller för att göra det möjligt för användaren att ändra storlek. Anropa en innehållsbaserad storleksändringsmetod i en händelsehanterare. Använd till exempel DataBindingComplete händelsen för att initiera storlekar efter bindning och hantera CellValidated händelsen eller CellValueChanged för att justera storlekar för att kompensera för användarredigeringar eller ändringar i en bunden datakälla.
Justera radhöjder för flerradscellinnehåll. Se till att kolumnbredderna är lämpliga för att visa textstycken och använd automatisk eller programmatisk innehållsbaserad radstorlek för att justera höjderna. Se också till att celler med flerradsinnehåll visas med cellformatvärdet WrapModeTrue.

Vanligtvis använder du ett automatiskt kolumnstorleksläge för att behålla kolumnbredder eller ställa in dem på specifika bredder innan radhöjderna justeras.

Ändra storlek med musen

Som standard kan användare ändra storlek på rader, kolumner och rubriker som inte använder ett automatiskt storleksläge baserat på cellvärden. Om du vill förhindra att användare ändrar storlek med andra lägen, till exempel kolumnfyllningsläge, anger du en eller flera av följande DataGridView egenskaper:

Du kan också förhindra användare från att ändra storlek på enskilda rader eller kolumner genom att ange deras Resizable egenskaper. Som standard baseras egenskapsvärdet Resizable på egenskapsvärdet AllowUserToResizeColumns för kolumner och egenskapsvärdet AllowUserToResizeRows för rader. Om du uttryckligen anger Resizable till True eller Falseåsidosätter det angivna värdet kontrollvärdet för den raden eller kolumnen. Ange Resizable till NotSet för att återställa arvet.

Eftersom NotSet återställer värdets arv Resizable returnerar egenskapen aldrig ett NotSet värde om inte raden eller kolumnen inte har lagts till i en DataGridView kontroll. Om du behöver ta reda på om egenskapsvärdet Resizable för en rad eller kolumn ärvs kan du granska dess State egenskap. Om värdet State innehåller ResizableSet flaggan ärvs inte egenskapsvärdet Resizable .

Automatisk storlek

Det finns två typer av automatisk storleksändring i DataGridView kontrollen: kolumnfyllningsläge och innehållsbaserad automatisk storleksändring.

Kolumnfyllningsläget gör att de synliga kolumnerna i kontrollen fyller bredden på kontrollens visningsområde. Mer information om det här läget finns i Kolumnfyllningsläge i Windows Forms DataGridView-kontrollen.

Du kan också konfigurera rader, kolumner och rubriker så att de automatiskt justerar sina storlekar så att de passar deras cellinnehåll. I det här fallet sker storleksjustering när cellinnehållet ändras.

Anmärkning

Om du underhåller cellvärden i en anpassad datacache med hjälp av virtuellt läge sker automatisk storleksändring när användaren redigerar ett cellvärde men inte inträffar när du ändrar ett cachelagrat värde utanför en CellValuePushed händelsehanterare. I det här fallet anropar UpdateCellValue du metoden för att tvinga kontrollen att uppdatera cellvisningen och tillämpa de aktuella automatiska storlekslägena.

Om innehållsbaserad automatisk storleksändring är aktiverad endast för en dimension , det vill: för rader men inte kolumner, eller för kolumner men inte rader, och WrapMode också aktiveras, sker storleksjustering när den andra dimensionen ändras. Om till exempel rader men inte kolumner har konfigurerats för automatisk storleksändring och WrapMode aktiveras kan användarna dra kolumnavdelare för att ändra bredden på en kolumn och radhöjden justeras automatiskt så att cellinnehållet fortfarande visas helt.

Om du konfigurerar både rader och kolumner för innehållsbaserad automatisk storleksändring och WrapMode är aktiverad justerar DataGridView kontrollen storlekar när cellinnehållet ändras och använder ett idealiskt cellhöjd-till-bredd-förhållande vid beräkning av nya storlekar.

Om du vill konfigurera storleksläget för rubriker och rader och för kolumner som inte åsidosätter kontrollvärdet anger du en eller flera av följande DataGridView egenskaper:

Om du vill åsidosätta kontrollens kolumnstorleksläge för en enskild kolumn anger du dess AutoSizeMode egenskap till ett annat värde än NotSet. Storleksläget för en kolumn bestäms faktiskt av dess InheritedAutoSizeMode egenskap. Värdet för den här egenskapen baseras på kolumnens egenskapsvärde AutoSizeMode såvida inte värdet är NotSet, i vilket fall kontrollens AutoSizeColumnsMode värde ärvs.

Använd innehållsbaserad automatisk storleksändring med försiktighet när du arbetar med stora mängder data. Undvik prestandapåföljder genom att använda automatiska storlekslägen som beräknar storlekar baserat endast på de rader som visas i stället för att analysera varje rad i kontrollen. För maximal prestanda använder du programmatisk storleksändring i stället så att du kan ändra storlek vid specifika tidpunkter, till exempel omedelbart efter att nya data har lästs in.

Innehållsbaserade automatiska storlekslägen påverkar inte rader, kolumner eller rubriker som du har dolt genom att ange egenskapen rad eller kolumn Visible eller kontrollen RowHeadersVisible eller ColumnHeadersVisible egenskaperna till false. Om en kolumn till exempel är dold när den har storleksanpassats automatiskt för att passa ett stort cellvärde, ändrar den dolda kolumnen inte dess storlek om raden som innehåller det stora cellvärdet tas bort. Automatisk storleksändring sker inte när synligheten ändras, så att ändra kolumnegenskapen Visible tillbaka till true tvingar den inte att beräkna om storleken baserat på dess aktuella innehåll.

Programmatisk innehållsbaserad storleksändring påverkar rader, kolumner och rubriker oavsett deras synlighet.

Programmatisk storleksändring

När automatisk storleksändring är inaktiverad kan du programmatiskt ange den exakta bredden eller höjden på rader, kolumner eller rubriker genom följande egenskaper:

Du kan också programmatiskt ändra storlek på rader, kolumner och rubriker så att de passar deras innehåll med hjälp av följande metoder:

Dessa metoder ändrar storlek på rader, kolumner eller rubriker en gång i stället för att konfigurera dem för kontinuerlig storleksändring. De nya storlekarna beräknas automatiskt för att visa allt cellinnehåll utan urklipp. När du programmatiskt ändrar storlek på kolumner som har InheritedAutoSizeMode egenskapsvärden Fillför , används dock de beräknade innehållsbaserade bredderna för att proportionellt justera kolumnegenskapsvärdena FillWeight , och kolumnbredderna beräknas sedan enligt dessa nya proportioner så att alla kolumner fyller kontrollens tillgängliga visningsområde.

Programmatisk storleksändring är användbar för att undvika prestandapåföljder med kontinuerlig storleksändring. Det är också användbart att ange initiala storlekar för användarstorleksbara rader, kolumner och rubriker samt för kolumnfyllningsläge.

Du anropar vanligtvis de programmatiska storleksändringsmetoderna vid specifika tidpunkter. Du kan till exempel ändra storlek på alla kolumner programmatiskt direkt efter inläsning av data, eller så kan du ändra storlek på en viss rad programmatiskt när ett visst cellvärde har ändrats.

Anpassa innehållsbaserat storleksbeteende

Du kan anpassa storleksbeteenden när du arbetar med härledda DataGridView cell-, rad- och kolumntyper genom att åsidosätta metoderna DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight eller DataGridViewColumn.GetPreferredWidth eller genom att anropa överlagrade skyddade storleksändringsmetoder i en härledd DataGridView kontroll. De skyddade överlagringarna i metoden för storleksändring är utformade för att fungera i par för att uppnå ett idealiskt cellhöjd-till-bredd-förhållande, vilket undviker för breda eller höga celler. Om du till exempel anropar överbelastningen av metoden AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean)AutoResizeRows och skickar in värdet false för parametern Boolean, kommer överbelastningen att beräkna de ideala höjderna och bredderna för celler i raden, men den justerar endast radhöjderna. Du måste sedan anropa AutoResizeColumns metoden för att justera kolumnbredderna till det beräknade idealet.

Alternativ för innehållsbaserad storleksändring

Uppräkningsvärden som används av storleksattribut och metoder har liknande värden för innehållsbaserad storleksattribut. Med dessa värden kan du begränsa vilka celler som används för att beräkna önskade storlekar. För alla storleksuppräkningar begränsar värden med namn som refererar till visade celler sina beräkningar till celler i rader som visas. Exkludering av rader är användbart för att undvika prestandastraff när du arbetar med en stor mängd rader. Du kan också begränsa beräkningar till cellvärden i rubrik- eller icke-huvudceller.

Se även