Opcje ustalania rozmiaru w formancie DataGridView formularzy systemu Windows

DataGridView Wiersze, kolumny i nagłówki mogą zmieniać rozmiar w wyniku wielu różnych wystąpień. W poniższej tabeli przedstawiono te wystąpienia.

Wystąpienia Opis
Zmiana rozmiaru użytkownika Użytkownicy mogą dostosowań rozmiaru, przeciągając lub klikając dwukrotnie separatory wierszy, kolumn lub nagłówków.
Kontrolowanie zmiany rozmiaru W trybie wypełniania kolumny szerokości kolumn zmieniają się, gdy zmienia się szerokość kontrolki. na przykład gdy kontrolka jest zadokowana do formularza nadrzędnego, a użytkownik zmienia rozmiar formularza.
Zmiana wartości komórki W trybach automatycznego zmieniania rozmiaru opartych na zawartości rozmiary zmieniają się w celu dopasowania do nowych wartości wyświetlanych.
Wywołanie metody Programowe zmienianie rozmiaru na podstawie zawartości umożliwia dostosowanie rozmiaru w zależności od wartości komórek w czasie wywołania metody.
Ustawienie właściwości Można również ustawić określone wartości wysokości i szerokości.

Domyślnie zmiana rozmiaru użytkownika jest włączona, automatyczne zmienianie rozmiaru jest wyłączone, a wartości komórek, które są szersze niż ich kolumny, są obcinane.

W poniższej tabeli przedstawiono scenariusze, których można użyć do dostosowania zachowania domyślnego lub użycia określonych opcji rozmiaru w celu osiągnięcia określonych efektów.

Scenariusz Implementacja
Tryb wypełniania kolumn umożliwia wyświetlanie danych o podobnym rozmiarze w stosunkowo małej liczbie kolumn, które zajmują całą szerokość kontrolki bez wyświetlania poziomego paska przewijania. Ustaw właściwość AutoSizeColumnsMode na wartość Fill.
Użyj trybu wypełniania kolumny z wyświetlanymi wartościami o różnych rozmiarach. Ustaw właściwość AutoSizeColumnsMode na wartość Fill. Zaimicjuj względne szerokości kolumn, ustawiając FillWeight właściwości kolumny AutoResizeColumns lub wywołując metodę sterowania po wypełnieniu kontrolki danymi.
Używaj trybu wypełniania kolumn z wartościami o różnej ważności. Ustaw właściwość AutoSizeColumnsMode na wartość Fill. Ustaw duże MinimumWidth wartości dla kolumn, które zawsze muszą wyświetlać niektóre z ich danych lub użyj opcji zmiany rozmiaru innej niż tryb wypełniania dla określonych kolumn.
Użyj trybu wypełniania kolumny, aby uniknąć wyświetlania tła kontrolki. Ustaw właściwość AutoSizeMode ostatniej kolumny na i Fill użyj innych opcji zmiany rozmiaru dla innych kolumn. Jeśli pozostałe kolumny używają zbyt dużej części dostępnego miejsca, ustaw MinimumWidth właściwość ostatniej kolumny.
Wyświetlanie kolumny o stałej szerokości, takiej jak ikona lub kolumna identyfikatora. Ustaw AutoSizeMode wartości None i Resizable na False dla kolumny. Zaimicjuj jego szerokość, ustawiając właściwość Width lub wywołując AutoResizeColumn metodę kontrolki po wypełnieniu kontrolki danymi.
Dostosuj rozmiary automatycznie przy każdej zmianie zawartości komórki, aby uniknąć przycinania i zoptymalizować użycie miejsca. Ustaw właściwość automatycznego rozmiaru na wartość, która reprezentuje tryb zmiany rozmiaru na podstawie zawartości. Aby uniknąć kar za wydajność podczas pracy z dużymi ilościami danych, należy użyć trybu zmiany rozmiaru, który oblicza tylko wyświetlane wiersze.
Dostosuj rozmiary, aby dopasować wartości w wyświetlanych wierszach, aby uniknąć problemów z wydajnością podczas pracy z wieloma wierszami. Użyj odpowiednich wartości wyliczenia w trybie zmiany rozmiaru z automatyczną lub programową zmienianiem rozmiaru. Aby dopasować rozmiary do wartości w nowo wyświetlanych wierszach podczas przewijania, wywołaj metodę zmiany rozmiaru w programie Scroll obsługi zdarzeń. Aby dostosować dwukrotne zmienianie rozmiaru przez użytkownika, tak aby tylko wartości w wyświetlanych wierszach określały nowe rozmiary, wywołaj metodę zmiany rozmiaru w programie RowDividerDoubleClick obsługi ColumnDividerDoubleClick zdarzeń lub .
Dostosuj rozmiary, aby dopasować zawartość komórki tylko w określonych momentach, aby uniknąć podniesień wydajności lub umożliwić użytkownikom zmienianie rozmiaru. Wywołaj metodę zmiany rozmiaru opartą na zawartości w programie obsługi zdarzeń. Na przykład użyj zdarzenia DataBindingComplete , aby zainicjować rozmiary po powiązaniu i CellValidated obsłużyć zdarzenie lub CellValueChanged w celu dostosowania rozmiarów w celu kompensowania zmian lub zmian wprowadzonych przez użytkownika w powiązanym źródle danych.
Dostosuj wysokości wierszy dla zawartości komórek wieloliniowych. Upewnij się, że szerokości kolumn są odpowiednie do wyświetlania akapitów tekstu, i użyj automatycznego lub programowego rozmiaru wierszy na podstawie zawartości, aby dostosować wysokość. Upewnij się również, że komórki z zawartością wieloliniową są wyświetlane przy użyciu wartości WrapMode stylu komórki .True

Zazwyczaj tryb automatycznego zmieniania rozmiaru kolumn jest używany do zachowania szerokości kolumn lub ustawienia dla nich określonych szerokości przed dostosowaniem wysokości wierszy.

Zmiana rozmiaru za pomocą myszy

Domyślnie użytkownicy mogą zmieniać rozmiar wierszy, kolumn i nagłówków, które nie używają trybu automatycznego zmieniania rozmiaru na podstawie wartości komórek. Aby uniemożliwić użytkownikom zmienianie rozmiaru przy użyciu innych trybów, takich jak tryb wypełniania kolumn, ustaw co najmniej jedną z następujących DataGridView właściwości:

Możesz również uniemożliwić użytkownikom zmienianie rozmiaru poszczególnych wierszy lub kolumn, ustawiając ich Resizable właściwości. Domyślnie wartość właściwości Resizable jest oparta na AllowUserToResizeColumns wartości właściwości kolumn i wartości AllowUserToResizeRows właściwości wierszy. Jeśli jednak jawnie ustawiono ResizableTrue wartość lub False, określona wartość zastępuje wartość kontrolki dla tego wiersza lub kolumny. Ustaw Resizable wartość na , NotSet aby przywrócić dziedziczenie.

Ponieważ NotSet przywraca dziedziczenie wartości, właściwość Resizable nigdy NotSet nie zwróci wartości, chyba że wiersz lub kolumna nie została dodana do kontrolki DataGridView . Jeśli chcesz określić, czy Resizable wartość właściwości wiersza lub kolumny jest dziedziczona, sprawdź jej State właściwość. Jeśli wartość State zawiera flagę ResizableSet , wartość Resizable właściwości nie jest dziedziczona.

Automatyczne dostosowywanie rozmiaru

Istnieją dwa rodzaje automatycznego rozmiaru w DataGridView kontrolce: tryb wypełniania kolumn i automatyczne rozmiaru na podstawie zawartości.

Tryb wypełniania kolumn powoduje, że widoczne kolumny w kontrolce wypełniają szerokość obszaru wyświetlania kontrolki. Aby uzyskać więcej informacji na temat tego trybu, zobacz Tryb wypełniania kolumn w Windows Forms DataGridView.

Można również skonfigurować wiersze, kolumny i nagłówki, aby automatycznie dostosowywać ich rozmiary do zawartości komórek. W takim przypadku dostosowanie rozmiaru następuje przy każdej zmianie zawartości komórki.

Uwaga

Jeśli wartości komórek są zachowywane w niestandardowej pamięci podręcznej danych przy użyciu trybu wirtualnego, CellValuePushed automatyczne zmienianie rozmiaru ma miejsce, gdy użytkownik edytuje wartość komórki, ale nie występuje w przypadku zmiany wartości buforowanej poza programem obsługi zdarzeń. W takim przypadku wywołaj metodę UpdateCellValue , aby wymusić zaktualizowanie wyświetlania komórki przez kontrolkę i zastosowanie bieżących trybów automatycznego rozmiaru.

Jeśli automatyczne rozmiary na podstawie zawartości są włączone tylko dla jednego wymiaru — czyli dla wierszy, ale nie kolumn, lub dla kolumn, WrapMode ale nie wierszy — i są włączone, dostosowanie rozmiaru ma miejsce również przy każdej zmianie innego wymiaru. WrapMode Jeśli na przykład wiersze, ale nie kolumny, są skonfigurowane do automatycznego zmieniania rozmiaru i włączone, użytkownicy mogą przeciągać separatory kolumn, aby zmienić szerokość kolumny i wysokości wierszy, zostaną automatycznie dostosowane, aby zawartość komórki była nadal w pełni wyświetlana.

WrapMode Jeśli skonfigurujesz zarówno wiersze, jak i kolumny do automatycznego ustalania rozmiaru na podstawie zawartości i zostanie ona włączona, DataGridView kontrolka dostosuje rozmiary przy każdej zmianie zawartości komórki i użyje idealnego współczynnika wysokości komórki do szerokości podczas obliczania nowych rozmiarów.

Aby skonfigurować tryb zmiany rozmiaru nagłówków i wierszy oraz kolumn, które nie zastępują wartości kontrolki, ustaw co najmniej jedną z następujących DataGridView właściwości:

Aby zastąpić tryb zmiany rozmiaru kolumny kontrolki dla poszczególnych kolumn, ustaw jej AutoSizeMode właściwość na wartość inną niż NotSet. Tryb zmiany rozmiaru kolumny jest w rzeczywistości określany przez jej właściwość InheritedAutoSizeMode . Wartość tej właściwości jest oparta AutoSizeModeNotSetna wartości właściwości kolumny, chyba że ta wartość to , AutoSizeColumnsMode w takim przypadku wartość kontrolki jest dziedziczona.

Podczas pracy z dużymi ilościami danych należy zachować ostrożność podczas automatycznego zmiany rozmiaru na podstawie zawartości. Aby uniknąć kar za wydajność, użyj automatycznych trybów zmiany rozmiaru, które obliczają rozmiary tylko na podstawie wyświetlanych wierszy, zamiast analizować każdy wiersz w kontrolce. Aby uzyskać maksymalną wydajność, zamiast tego użyj programowej zmiany rozmiaru, aby można było zmienić rozmiar w określonych godzinach, na przykład natychmiast po załadowaniu nowych danych.

Tryby automatycznego ustalania rozmiaru oparte na zawartości nie wpływają na wiersze, kolumny lub nagłówki ukryte VisibleRowHeadersVisibleColumnHeadersVisible przez ustawienie właściwości wiersza lub kolumny albo kontrolki lub właściwości na falsewartość . Jeśli na przykład kolumna jest ukryta po jej automatycznie dopasowanym rozmiarze do dużej wartości komórki, ukryta kolumna nie zmieni jej rozmiaru, jeśli wiersz zawierający dużą wartość komórki zostanie usunięty. Automatyczne zmienianie rozmiaru nie występuje po zmianie widoczności, więc zmiana właściwości kolumny Visibletrue z powrotem na nie wymusi ponownego skalowania rozmiaru na podstawie bieżącej zawartości.

Programowa zmiana rozmiaru na podstawie zawartości ma wpływ na wiersze, kolumny i nagłówki niezależnie od ich widoczności.

Programowe zmienianie rozmiaru

Po wyłączeniu automatycznego rozmiaru można programowo ustawić dokładną szerokość lub wysokość wierszy, kolumn lub nagłówków za pomocą następujących właściwości:

Można również programowo zmienić rozmiar wierszy, kolumn i nagłówków, aby dopasować je do ich zawartości przy użyciu następujących metod:

Te metody będą zmieniać rozmiar wierszy, kolumn lub nagłówków raz, zamiast konfigurować je do ciągłego zmieniania rozmiaru. Nowe rozmiary są obliczane automatycznie w celu wyświetlenia całej zawartości komórki bez przycinania. InheritedAutoSizeModeFillJednak w przypadku programowego zmieniania rozmiaru kolumn, które mają wartości właściwości , obliczone szerokości oparte na zawartości są używane do proporcjonalnego dostosowania wartości właściwości kolumny, a w rzeczywistości szerokości kolumn są następnie obliczane zgodnie z tymi nowymi proporcjami, FillWeight tak aby wszystkie kolumny wypełniały dostępny obszar wyświetlania kontrolki.

Programowe zmienianie rozmiaru jest przydatne, aby uniknąć problemów z wydajnością w przypadku ciągłej zmiany rozmiaru. Przydatne jest również podanie początkowych rozmiarów wierszy, kolumn i nagłówków, które można zmieniać dla użytkownika, oraz dla trybu wypełniania kolumn.

Metody programowej zmiany rozmiaru są zwykle używane w określonych godzinach. Na przykład można programowo zmienić rozmiar wszystkich kolumn natychmiast po załadowaniu danych lub programowo zmienić rozmiar określonego wiersza po zmodyfikowaniu określonej wartości komórki.

Dostosowywanie zachowania zmiany rozmiaru na podstawie zawartości

Zachowania dotyczące rozmiaru podczas DataGridView pracy z typami komórek pochodnych, DataGridViewCell.GetPreferredSizewierszy i kolumn można dostosować, zastępując metody , DataGridViewRow.GetPreferredHeightlub DataGridViewColumn.GetPreferredWidthDataGridView lub wywołując chronione przeciążenia metod zmiany rozmiaru w kontrolce pochodnej. Chronione przeciążenia metod zmiany rozmiaru są przeznaczone do pracy w parach w celu uzyskania idealnego stosunku wysokości komórki do szerokości, unikając zbyt szerokich lub wysokich komórek. Jeśli na AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean)AutoResizeRowsfalseBoolean przykład wywołasz przeciążenie metody i przekażemy wartość parametru , przeciążenie obliczy idealną wysokość i szerokość komórek w wierszu, ale dostosuje tylko wysokości wierszy. Następnie należy wywołać metodę , AutoResizeColumns aby dostosować szerokość kolumn do obliczonego idealnego.

Opcje rozmiaru oparte na zawartości

Wyliczenia używane przez metody i właściwości rozmiaru mają podobne wartości w przypadku rozmiarów opartych na zawartości. Przy użyciu tych wartości można ograniczyć komórki używane do obliczania preferowanych rozmiarów. W przypadku wszystkich wyliczeń rozmiarów wartości z nazwami odwołującymi się do wyświetlanych komórek ograniczają swoje obliczenia do komórek w wyświetlanych wierszach. Wykluczenie wierszy jest przydatne w celu uniknięcia wydajności w przypadku pracy z dużą ilością wierszy. Można również ograniczyć obliczenia do wartości komórek w komórkach nagłówka lub bez nagłówka.

Zobacz też