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ąpienie opis
Zmiana rozmiaru użytkownika Użytkownicy mogą wprowadzać korekty rozmiaru, przeciągając lub klikając dwukrotnie wiersz, kolumnę lub separatory nagłówków.
Zmiana rozmiaru kontrolki W trybie wypełniania kolumny szerokość kolumny zmienia się po zmianie szerokości 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 określania rozmiaru opartego na zawartości rozmiary zmieniają się, aby dopasować nowe wartości wyświetlania.
Wywołanie metody Programowa zmiana rozmiaru oparta na zawartości umożliwia dostosowanie rozmiaru oportunistycznego na podstawie 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 ustalanie rozmiaru jest wyłączone, a wartości komórek, które są szersze niż ich kolumny są obcięte.

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

Scenariusz Implementacja
Użyj trybu wypełniania kolumny do wyświetlania 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 Fill.
Użyj trybu wypełniania kolumny z wartościami wyświetlanymi o różnych rozmiarach. Ustaw właściwość AutoSizeColumnsMode na Fill. Zainicjuj względne szerokości kolumn, ustawiając właściwości kolumny FillWeight lub wywołując metodę kontrolki AutoResizeColumns po wypełnieniu kontrolki danymi.
Użyj trybu wypełniania kolumny z wartościami o różnym znaczeniu. Ustaw właściwość AutoSizeColumnsMode na Fill. Ustaw duże MinimumWidth wartości dla kolumn, które muszą zawsze wyświetlać niektóre z ich danych lub używać opcji określania rozmiaru innej niż tryb wypełniania dla określonych kolumn.
Użyj trybu wypełniania kolumny, aby uniknąć wyświetlania tła kontrolki. AutoSizeMode Ustaw właściwość ostatniej kolumny na Fill i użyj innych opcji określania rozmiaru dla innych kolumn. Jeśli inne kolumny używają zbyt dużej ilości dostępnego miejsca, ustaw MinimumWidth właściwość ostatniej kolumny.
Wyświetl kolumnę o stałej szerokości, taką jak ikona lub kolumna IDENTYFIKATORa. None Dla kolumny ustaw AutoSizeMode wartość i Resizable na False . Zainicjuj Width jej szerokość, ustawiając właściwość lub wywołując metodę kontrolki AutoResizeColumn po wypełnieniu kontrolki danymi.
Dostosuj rozmiary automatycznie za każdym razem, gdy zawartość komórki zmieni się, aby uniknąć wycinków i zoptymalizować wykorzystanie miejsca. Ustaw właściwość automatycznego określania rozmiaru na wartość reprezentującą tryb ustalania rozmiaru na podstawie zawartości. Aby uniknąć kary za wydajność podczas pracy z dużymi ilościami danych, należy użyć trybu ustalania rozmiaru, który oblicza tylko wyświetlane wiersze.
Dostosuj rozmiary, aby dopasować wartości w wyświetlanych wierszach, aby uniknąć kar za wydajność podczas pracy z wieloma wierszami. Użyj odpowiednich wartości wyliczania trybu ustalania rozmiaru z automatycznym lub programowym zmienianiem rozmiaru. Aby dopasować rozmiary do wartości w nowo wyświetlanych wierszach podczas przewijania, wywołaj metodę zmiany rozmiaru w procedurze obsługi zdarzeń Scroll . Aby dostosować dwukrotnie zmianę rozmiaru użytkownika, aby tylko wartości w wyświetlanych wierszach określały nowe rozmiary, wywołaj metodę zmiany rozmiaru w RowDividerDoubleClick programie obsługi zdarzeń lub ColumnDividerDoubleClick .
Dostosuj rozmiary, aby dopasować zawartość komórki tylko w określonych godzinach, aby uniknąć kar za wydajność lub włączyć zmianę rozmiaru użytkownika. Wywołaj metodę zmiany rozmiaru opartą na zawartości w procedurze obsługi zdarzeń. Na przykład użyj DataBindingComplete zdarzenia, aby zainicjować rozmiary po powiązaniu i obsłużyć CellValidated zdarzenie lub CellValueChanged , aby dostosować rozmiary w celu zrekompensowania zmian lub zmian w powiązanym źródle danych.
Dopasuj wysokości wierszy dla zawartości komórki wielowierszowej. Upewnij się, że szerokość kolumny jest odpowiednia do wyświetlania akapitów tekstu i używaj automatycznego lub programowego określania rozmiaru wierszy na podstawie zawartości w celu dostosowania wysokości. Upewnij się również, że komórki z zawartością wielowierszową WrapMode są wyświetlane przy użyciu wartości Truestylu komórki .

Zazwyczaj użyjesz trybu automatycznego określania rozmiaru kolumn, aby zachować szerokość kolumny lub ustawić je na określone 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 korzystają z trybu automatycznego określania rozmiaru na podstawie wartości komórek. Aby uniemożliwić użytkownikom zmianę rozmiaru z innymi trybami, takimi jak tryb wypełniania kolumny, ustaw co najmniej jedną z następujących DataGridView właściwości:

Można również uniemożliwić użytkownikom zmianę rozmiaru poszczególnych wierszy lub kolumn, ustawiając ich Resizable właściwości. Domyślnie Resizable wartość właściwości jest oparta na AllowUserToResizeColumns wartości właściwości kolumn i AllowUserToResizeRows wartości właściwości dla 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 , aby NotSet przywrócić dziedziczenie.

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

Automatyczne ustalanie rozmiaru

W kontrolce istnieją dwa rodzaje automatycznego określania rozmiaru DataGridView : tryb wypełniania kolumny i automatyczne ustalanie 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 kontrolce DataGridView formularzy systemu Windows.

Można również skonfigurować wiersze, kolumny i nagłówki, aby automatycznie dostosować ich rozmiary do ich zawartości komórki. W takim przypadku zmiana rozmiaru odbywa się za każdym razem, gdy zawartość komórki się zmieni.

Uwaga

Jeśli zachowasz wartości komórek w niestandardowej pamięci podręcznej danych przy użyciu trybu wirtualnego, automatyczne ustalanie rozmiaru występuje, gdy użytkownik edytuje wartość komórki, ale nie występuje w przypadku zmiany buforowanej wartości poza CellValuePushed procedurą obsługi zdarzeń. W takim przypadku wywołaj metodę UpdateCellValue , aby wymusić aktualizację ekranu komórki i zastosować bieżące tryby automatycznego określania rozmiaru.

Jeśli automatyczne ustalanie rozmiaru opartego na zawartości jest włączone tylko dla jednego wymiaru — to znaczy dla wierszy, ale nie kolumn lub kolumn, ale nie wierszy — i WrapMode jest również włączone, korekta rozmiaru również następuje za każdym razem, gdy inny wymiar się zmieni. Jeśli na przykład wiersze, ale nie kolumny są skonfigurowane do automatycznego określania rozmiaru i WrapMode są włączone, użytkownicy mogą przeciągać podziały kolumn, aby zmienić szerokość kolumny i wysokości wierszy, automatycznie dostosują się tak, aby zawartość komórki nadal jest w pełni wyświetlana.

Jeśli skonfigurujesz zarówno wiersze, jak i kolumny pod kątem automatycznego określania rozmiaru opartego na zawartości i WrapMode zostanie włączona, DataGridView kontrolka dostosuje rozmiary zawsze, gdy zawartość komórki ulegnie zmianie i użyje idealnego współczynnika wysokości komórki do szerokości podczas obliczania nowych rozmiarów.

Aby skonfigurować tryb określania 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 ustalania rozmiaru kolumny kontrolki dla pojedynczej kolumny, ustaw jej AutoSizeMode właściwość na wartość inną niż NotSet. Tryb określania rozmiaru kolumny jest faktycznie określany przez jego InheritedAutoSizeMode właściwość. Wartość tej właściwości jest oparta na wartości właściwości kolumny AutoSizeMode , chyba że ta wartość to NotSet, w takim przypadku wartość kontrolki AutoSizeColumnsMode jest dziedziczona.

Używaj automatycznego zmieniania rozmiaru opartego na zawartości z ostrożnością podczas pracy z dużą ilością danych. Aby uniknąć kar za wydajność, użyj trybów automatycznego określania rozmiaru, które obliczają rozmiary tylko na podstawie wyświetlanych wierszy, a nie analizowania każdego wiersza w kontrolce. Aby uzyskać maksymalną wydajność, należy zamiast tego użyć zmiany rozmiaru programowego, aby można było zmienić rozmiar w określonym czasie, na przykład natychmiast po załadowaniu nowych danych.

Tryby automatycznego określania rozmiaru oparte na zawartości nie mają wpływu na wiersze, kolumny lub nagłówki ukryte przez ustawienie właściwości wiersza lub kolumny Visible albo kontrolki RowHeadersVisible lub ColumnHeadersVisible właściwości na falsewartość . Jeśli na przykład kolumna jest ukryta po automatycznym rozmiarze, aby zmieścić dużą wartość komórki, ukryta kolumna nie zmieni jej rozmiaru, jeśli wiersz zawierający dużą wartość komórki zostanie usunięty. Automatyczne ustalanie rozmiaru nie występuje, gdy zmienia się widoczność, więc zmiana właściwości kolumny Visible z powrotem na true nie spowoduje wymuszenia ponownego obliczenia rozmiaru na podstawie bieżącej zawartości.

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

Programowa zmiana rozmiaru

Gdy automatyczne ustalanie rozmiaru jest wyłączone, 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 zmieniać rozmiar wierszy, kolumn i nagłówków, aby dopasować ich zawartość przy użyciu następujących metod:

Te metody spowodują zmianę rozmiaru wierszy, kolumn lub nagłówków raz, a nie skonfigurowanie ich pod kątem ciągłej zmiany rozmiaru. Nowe rozmiary są automatycznie obliczane w celu wyświetlenia całej zawartości komórki bez wycinków. Podczas programowego zmieniania rozmiaru kolumn, które mają InheritedAutoSizeMode wartości Fillwłaściwości , jednak obliczone szerokości oparte na zawartości są używane do proporcjonalnego dostosowania wartości właściwości kolumny, a faktycznie szerokości kolumn FillWeight są obliczane zgodnie z tymi nowymi proporcjami, tak aby wszystkie kolumny wypełniały dostępny obszar wyświetlania kontrolki.

Zmiana rozmiaru programowego jest przydatna w celu uniknięcia kar za wydajność przy ciągłym zmienianiu rozmiaru. Przydatne jest również podanie początkowych rozmiarów wierszy, kolumn i nagłówków z możliwością zmiany rozmiaru użytkownika oraz trybu wypełniania kolumn.

Zazwyczaj programowe metody zmiany rozmiaru są wywoływane w określonych godzinach. Można na przykład 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 określania rozmiaru opartego na zawartości

Zachowanie ustalania rozmiaru można dostosować podczas pracy z typami komórek pochodnychDataGridView, wierszy i kolumn przez zastąpienie metod , DataGridViewRow.GetPreferredHeightlub DataGridViewColumn.GetPreferredWidth przez wywołanie DataGridViewCell.GetPreferredSizeprzeciążeń chronionej metody zmiany rozmiaru w kontrolce pochodnejDataGridView. Chronione przeciążenia metody zmiany rozmiaru są przeznaczone do pracy w parach w celu osiągnięcia idealnego stosunku wysokości do szerokości komórki, unikając zbyt szerokich lub wysokich komórek. Jeśli na przykład wywołasz AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) przeciążenie metody i przekażesz wartość false parametru Boolean , przeciążenie AutoResizeRows obliczy idealne wysokości i szerokości komórek w wierszu, ale dostosuje tylko wysokość wiersza. Następnie należy wywołać metodę AutoResizeColumns , aby dostosować szerokość kolumny do obliczonego ideału.

Opcje określania rozmiaru oparte na zawartości

Wyliczenia używane przez właściwości i metody określania rozmiaru mają podobne wartości rozmiaru opartego na zawartości. Za pomocą tych wartości można ograniczyć komórki używane do obliczania preferowanych rozmiarów. W przypadku wszystkich wyliczenia rozmiarów wartości z nazwami odwołującymi się do wyświetlanych komórek ograniczają obliczenia do komórek w wyświetlanych wierszach. Wykluczanie wierszy jest przydatne, aby uniknąć kary za wydajność podczas pracy z dużą ilością wierszy. Można również ograniczyć obliczenia do wartości komórek w komórkach nagłówka lub innych niż nagłówki.

Zobacz też