Изменение размеров управления DataGridView в Windows FormsSizing Options in the Windows Forms DataGridView Control

DataGridView размер во многих случаях можно изменить строк, столбцов и заголовков.DataGridView rows, columns, and headers can change size as a result of many different occurrences. В следующей таблице показаны эти случаи.The following table shows these occurrences.

вхожденияOccurrence ОписаниеDescription
Изменение размера пользователемUser resize Пользователи могут изменять размеры, перетащив или дважды щелкнув строки, столбца или заголовок разделителей.Users can make size adjustments by dragging or double-clicking row, column, or header dividers.
Изменение размеров элемента управленияControl resize В режиме заполнения столбцов изменение ширины столбцов при изменении ширины элемента управления; Например, когда элемент управления подключено к ее родительской формы и пользователем размера формы.In column fill mode, column widths change when the control width changes; for example, when the control is docked to its parent form and the user resizes the form.
Изменение значения ячейкиCell value change В режимах автоматического изменения размеров на основе содержимого размеры изменяются в соответствии с новой отображаемых значений.In content-based automatic sizing modes, sizes change to fit new display values.
Вызов методаMethod call Программное изменение размеров на основе содержимого позволяет добиться гибкой корректировки размеров на основе значений ячеек во время вызова метода.Programmatic content-based resizing lets you make opportunistic size adjustments based on cell values at the time of the method call.
Значение свойстваProperty setting Можно также задать значения определенных высоты и ширины.You can also set specific height and width values.

По умолчанию изменение размеров пользователем включено, отключено автоматическое изменение размеров и обрезаются значения ячеек, которые шире, чем их столбцов.By default, user resizing is enabled, automatic sizing is disabled, and cell values that are wider than their columns are clipped.

Ниже приведены сценарии можно использовать для изменения поведения по умолчанию или использовать параметры конкретного изменения размера для достижения определенного эффектов.The following table shows scenarios that you can use to adjust the default behavior or to use specific sizing options to achieve particular effects.

СценарийScenario РеализацияImplementation
Использование режима заполнения столбца для отображения различить по размеру данных в относительно небольшое количество столбцов, которые занимают всю ширину элемента управления без отображения горизонтальной полосы прокрутки.Use column fill mode for displaying similarly sized data in a relatively small number of columns that occupy the entire width of the control without displaying the horizontal scroll bar. Задайте для свойства AutoSizeColumnsMode значение Fill.Set the AutoSizeColumnsMode property to Fill.
Использование режима заполнения столбца с отображают значения разного размера.Use column fill mode with display values of varying sizes. Задайте для свойства AutoSizeColumnsMode значение Fill.Set the AutoSizeColumnsMode property to Fill. Инициализируйте относительную ширину столбцов путем присвоения столбцу FillWeight свойства или путем вызова элемента управления AutoResizeColumns метод после заполнения элемента управления данными.Initialize relative column widths by setting the column FillWeight properties or by calling the control AutoResizeColumns method after filling the control with data.
Использование режима заполнения столбца со значениями различной важности.Use column fill mode with values of varying importance. Задайте для свойства AutoSizeColumnsMode значение Fill.Set the AutoSizeColumnsMode property to Fill. Значение велико MinimumWidth значения для столбцов, которые всегда должна отображаться часть данных или использовать параметр изменения размера, отличное от заполнения режиме для определенных столбцов.Set large MinimumWidth values for columns that must always display some of their data or use a sizing option other than fill mode for specific columns.
Использование режима заполнения, чтобы избежать отображения фон элемента управления.Use column fill mode to avoid displaying the control background. Задайте AutoSizeMode свойства последнего столбца для Fill и использовать другие параметры изменения размеров для других столбцов.Set the AutoSizeMode property of the last column to Fill and use other sizing options for the other columns. Если другие столбцы использовать слишком много дискового пространства, задайте MinimumWidth свойства последнего столбца.If the other columns use too much of the available space, set the MinimumWidth property of the last column.
Отобразить столбец фиксированной ширины, например значка или столбец идентификатора.Display a fixed-width column, such as an icon or ID column. Задайте AutoSizeMode для None и Resizable для False для столбца.Set AutoSizeMode to None and Resizable to False for the column. Инициализируйте его ширину, задав Width свойства или путем вызова элемента управления AutoResizeColumn метод после заполнения элемента управления данными.Initialize its width by setting the Width property or by calling the control AutoResizeColumn method after filling the control with data.
Автоматическое изменение размеров при каждом изменении содержимого ячейки во избежание обрезки и оптимизировать использование места.Adjust sizes automatically whenever cell contents change to avoid clipping and to optimize the use of space. Задание автоматического изменения размера свойству значение, представляющее режим изменения размеров на основе содержимого.Set an automatic sizing property to a value that represents a content-based sizing mode. Чтобы избежать снижения производительности при работе с большими объемами данных, используйте режим изменения размеров, которая вычисляет отображаются только строки.To avoid a performance penalty when working with large amounts of data, use a sizing mode that calculates displayed rows only.
Изменение размеров в зависимости от значений в отображаемых строках, чтобы избежать снижения производительности при работе с большим количеством строк.Adjust sizes to fit values in displayed rows to avoid performance penalties when working with many rows. Используйте соответствующее перечисление режим изменения размеров значения с автоматическое или программное изменение размера.Use the appropriate sizing-mode enumeration values with automatic or programmatic resizing. Чтобы изменение размеров в зависимости значения во вновь отображаемых строках при прокрутке, вызовите метод изменения размеров Scroll обработчик событий.To adjust sizes to fit values in newly displayed rows while scrolling, call a resizing method in a Scroll event handler. Для настройки двойного щелчка пользователем изменение размера таким образом, чтобы только значения в отображаемых строках определения нового размера, вызовите метод изменения размеров RowDividerDoubleClick или ColumnDividerDoubleClick обработчик событий.To customize user double-click resizing so that only values in displayed rows determine the new sizes, call a resizing method in a RowDividerDoubleClick or ColumnDividerDoubleClick event handler.
Изменение размеров, чтобы вместить содержимое ячейки только в определенное время, чтобы избежать снижения производительности или включить изменение размера пользователем.Adjust sizes to fit cell contents only at specific times to avoid performance penalties or to enable user resizing. Вызовите метод изменения размеров на основе содержимого в обработчике событий.Call a content-based resizing method in an event handler. Например, использовать DataBindingComplete событий для инициализации размеров после привязки и обработки CellValidated или CellValueChanged событий для контроля размера, чтобы компенсировать изменений пользователем, или изменений в связанном источнике данных.For example, use the DataBindingComplete event to initialize sizes after binding, and handle the CellValidated or CellValueChanged event to adjust sizes to compensate for user edits or changes in a bound data source.
Изменение высоты строк для многострочного содержимого ячеек.Adjust row heights for multiline cell contents. Убедитесь, что ширина столбцов подходит для отображения абзацы текста и использовать изменения размера автоматического или программный строк на основе содержимого для изменения высоты.Ensure that column widths are appropriate for displaying paragraphs of text and use automatic or programmatic content-based row sizing to adjust the heights. Также убедитесь, что ячейки с многострочным содержимым отображаются с помощью WrapMode стиля значение из ячейки True.Also ensure that cells with multiline content are displayed using a WrapMode cell style value of True.

Как правило для сохранения ширины столбцов или задать для них определенную ширину до высоты строк используется автоматический режим изменения размеров.Typically, you will use an automatic column sizing mode to maintain column widths or set them to specific widths before row heights are adjusted.

Изменение размеров с помощью мышиResizing with the Mouse

По умолчанию пользователь может изменять размер строк, столбцов и заголовков, которые не использовать режим автоматического изменения размеров на основе значений ячеек.By default, users can resize rows, columns, and headers that do not use an automatic sizing mode based on cell values. Чтобы запретить пользователям изменение размеров в других режимах, например в режиме заполнения столбцов, задайте одно или несколько из следующих DataGridView свойства:To prevent users from resizing with other modes, such as column fill mode, set one or more of the following DataGridView properties:

Вы можете также запретить пользователям изменять размеры отдельных строк или столбцов, задав их Resizable свойства.You can also prevent users from resizing individual rows or columns by setting their Resizable properties. По умолчанию Resizable зависит от значения свойства AllowUserToResizeColumns значение свойства для столбцов и AllowUserToResizeRows значение свойства для строк.By default, the Resizable property value is based on the AllowUserToResizeColumns property value for columns and the AllowUserToResizeRows property value for rows. Если явно задать Resizable для True или False, но при этом указанное значение переопределяет значение элемента управления — для строки или столбца.If you explicitly set Resizable to True or False, however, the specified value overrides the control value is for that row or column. Задайте Resizable для NotSet восстановить наследование.Set Resizable to NotSet to restore the inheritance.

Так как NotSet восстанавливает наследование значения, Resizable не будет возвращать NotSet пока строка или столбец не был добавлен к DataGridView элемента управления.Because NotSet restores the value inheritance, the Resizable property will never return a NotSet value unless the row or column has not been added to a DataGridView control. Если вам нужно определить ли Resizable унаследовано значение свойства строки или столбца, и проверьте его State свойство.If you need to determine whether the Resizable property value of a row or column is inherited, examine its State property. Если State значение включает ResizableSet флаг, Resizable значение свойства не является унаследованным.If the State value includes the ResizableSet flag, the Resizable property value is not inherited.

Автоматическое изменение размеровAutomatic Sizing

Существует два типа автоматического изменения размеров в DataGridView управления: режим заполнения столбца и автоматического изменения размеров на основе содержимого.There are two kinds of automatic sizing in the DataGridView control: column fill mode and content-based automatic sizing.

Режим заполнения столбца приводит к видимых столбцов в элементе управления для заполнения отображаемой области элемента управления.Column fill mode causes the visible columns in the control to fill the width of the control's display area. Дополнительные сведения об этом режиме см. в разделе режим заполнения столбцов в элементе управления DataGridView Windows Forms.For more information about this mode, see Column Fill Mode in the Windows Forms DataGridView Control.

Можно также настроить строк, столбцов и заголовков на автоматическое изменение размеров в соответствии с содержимым ячейки.You can also configure rows, columns, and headers to automatically adjust their sizes to fit their cell contents. В этом случае изменение размера происходит при каждом изменении содержимого ячейки.In this case, size adjustment occurs whenever cell contents change.

Примечание

Если необходимо сохранить значения ячеек в кэше пользовательских данных в виртуальном режиме, автоматическое изменение размеров происходит, когда пользователь редактирует значение ячейки, но не возникает, если кэшированное значение за пределами CellValuePushed обработчик событий.If you maintain cell values in a custom data cache using virtual mode, automatic sizing occurs when the user edits a cell value but does not occur when you alter a cached value outside of a CellValuePushed event handler. В этом случае вызов UpdateCellValue способ принудительного обновления отображения ячейки и применить текущих режимов автоматического изменения размеров элемента управления.In this case, call the UpdateCellValue method to force the control to update the cell display and apply the current automatic sizing modes.

При включении автоматического изменения размеров на основе содержимого только для одного измерения —, есть, для строк, а не столбцы или столбцы, а не строки, и WrapMode является также включен, размер изменяется при каждом изменении другого измерения.If content-based automatic sizing is enabled for one dimension only—that is, for rows but not columns, or for columns but not rows—and WrapMode is also enabled, size adjustment also occurs whenever the other dimension changes. Например, если строки, но не столбцов настроены для автоматического изменения размера и WrapMode — включена, пользователи смогут перетаскивать разделители столбцов, изменение ширины столбца и высоты строк автоматически настроит для по-прежнему полностью отображения содержимого ячейки.For example, if rows but not columns are configured for automatic sizing and WrapMode is enabled, users can drag column dividers to change the width of a column and row heights will automatically adjust so that cell contents are still fully displayed.

Если вы настраиваете строк и столбцов для автоматического изменения размеров на основе содержимого и WrapMode включен, DataGridView управления настроит размеры при изменении содержимого ячейки и будет использовать соотношения высоты и ширины ячейки, при вычислении новых размеров.If you configure both rows and columns for content-based automatic sizing and WrapMode is enabled, the DataGridView control will adjust sizes whenever cell contents changed and will use an ideal cell height-to-width ratio when calculating new sizes.

Чтобы настроить режим изменения размеров для заголовков и строк и столбцов, которые не переопределяют значение элемента управления, задайте одно или несколько из следующих DataGridView свойства:To configure the sizing mode for headers and rows and for columns that do not override the control value, set one or more of the following DataGridView properties:

Чтобы переопределить режим изменения размеров столбца элемента управления для отдельного столбца, задайте его AutoSizeMode присваивается значение, отличное от NotSet.To override the control's column sizing mode for an individual column, set its AutoSizeMode property to a value other than NotSet. Режим изменения размеров для столбца фактически определяется его InheritedAutoSizeMode свойство.The sizing mode for a column is actually determined by its InheritedAutoSizeMode property. Значение этого свойства основан на столбце AutoSizeMode значение свойства, если это значение не NotSetв этом случае элемента управления AutoSizeColumnsMode значение наследуется.The value of this property is based on the column's AutoSizeMode property value unless that value is NotSet, in which case the control's AutoSizeColumnsMode value is inherited.

Используйте по содержимому автоматическое изменение размеров с осторожностью при работе с большими объемами данных.Use content-based automatic resizing with caution when working with large amounts of data. Чтобы избежать снижения производительности, используйте режима автоматического изменения размеров, которые вычисляют размеров на основе только отображаемых строк, а не анализ каждой строки в элементе управления.To avoid performance penalties, use the automatic sizing modes that calculate sizes based only on the displayed rows rather than analyzing every row in the control. Для достижения максимальной производительности используйте программное изменение размеров, таким образом, можно изменить размер в определенное время, например сразу же после новых данных загружается.For maximum performance, use programmatic resizing instead so that you can resize at specific times, such as immediately after new data is loaded.

Режимы автоматического изменения размеров на основе содержимого не влияют на строки, столбцы или заголовки, которые скрыты, задав строку или столбец Visible свойство или элемент управления RowHeadersVisible или ColumnHeadersVisible свойства false.Content-based automatic sizing modes do not affect rows, columns, or headers that you have hidden by setting the row or column Visible property or the control RowHeadersVisible or ColumnHeadersVisible properties to false. Например если столбец является скрытым после подбираться автоматически в соответствии с большого значения ячейки, скрытый столбец будет не изменять свой размер при удалении строки, содержащей большим значением ячейки.For example, if a column is hidden after it is automatically sized to fit a large cell value, the hidden column will not change its size if the row containing the large cell value is deleted. Автоматическое изменение размеров не происходит при изменении видимости, поэтому изменение столбца Visible обратно на true не приведет к пересчету его размера, в зависимости от его текущего содержимого.Automatic sizing does not occur when visibility changes, so changing the column Visible property back to true will not force it to recalculate its size based on its current contents.

Программное изменение размеров на основе содержимого влияет на строки, столбцы и заголовки независимо от их видимости.Programmatic content-based resizing affects rows, columns, and headers regardless of their visibility.

Программное изменение размеровProgrammatic Resizing

При отключении автоматического изменения размера, можно программно установить точную ширину или высоту строк, столбцов или заголовки через следующие свойства:When automatic sizing is disabled, you can programmatically set the exact width or height of rows, columns, or headers through the following properties:

Можно также программно изменить размер строк, столбцов и заголовков по их содержимому, используя следующие методы:You can also programmatically resize rows, columns, and headers to fit their contents using the following methods:

Эти методы изменяют размеры строк, столбцов, или один раз заголовки не настроены на постоянное изменение размеров.These methods will resize rows, columns, or headers once rather than configuring them for continuous resizing. Новые размеры вычисляются автоматически, чтобы отобразить все содержимое ячейки без обрезки.The new sizes are automatically calculated to display all cell contents without clipping. Если программно изменить размеры столбцов, имеющих InheritedAutoSizeMode значения свойств Fill, тем не менее, рассчитанных значений ширины по содержимому используются для пропорционального изменения FillWeight значения свойств и фактически столбец, значения ширины Затем рассчитывается в соответствии с этим новым соотношениям, таким образом, все столбцы заполняли доступную область отображения элемента управления.When you programmatically resize columns that have InheritedAutoSizeMode property values of Fill, however, the calculated content-based widths are used to proportionally adjust the column FillWeight property values, and the actually column widths are then calculated according to these new proportions so that all columns fill the available display area of the control.

Программное изменение размеров позволяет избежать снижения производительности при постоянное изменение размеров.Programmatic resizing is useful to avoid performance penalties with continuous resizing. Это также полезно для предоставления исходные размеры пользователь изменять размер строк, столбцов и заголовков и режима заполнения.It is also useful to provide initial sizes for user-resizable rows, columns, and headers, and for column fill mode.

Обычно, будет вызывать методы программного изменения размеров в определенное время.You will typically call the programmatic resizing methods at specific times. Например программно изменить размеры всех столбцов сразу после загрузки данных, или может программно изменить размеры конкретной строки после изменения определенного значения ячейки.For example, you might programmatically resize all columns immediately after loading data, or you might programmatically resize a specific row after a particular cell value has been modified.

Настройка размеров на основе содержимогоCustomizing Content-based Sizing Behavior

Поведение размеров можно настроить при работе с производными DataGridView типов ячеек, строк и столбцов путем переопределения DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight, или DataGridViewColumn.GetPreferredWidth методы или вызвав защищенные перегрузки методов изменения размеров в производном DataGridView элемент управления.You can customize sizing behaviors when working with derived DataGridView cell, row, and column types by overriding the DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight, or DataGridViewColumn.GetPreferredWidth methods or by calling protected resizing method overloads in a derived DataGridView control. Защищенные перегрузки методов изменения размеров предназначены для работы в парах для достижения соотношения высоты и ширины ячейки, как избежать чрезмерно ширину или высоту ячейки.The protected resizing method overloads are designed to work in pairs to achieve an ideal cell height-to-width ratio, avoiding overly wide or tall cells. Например, если вы вызываете AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) перегрузки AutoResizeRows метод и передать значение false для Boolean параметра, перегрузка вычислит Идеальная высота и ширина для ячейки в строке, но она изменит значения высоты строк только.For example, if you call the AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) overload of the AutoResizeRows method and pass in a value of false for the Boolean parameter, the overload will calculate the ideal heights and widths for cells in the row, but it will adjust the row heights only. Затем необходимо вызвать AutoResizeColumns метод, чтобы ширина столбца в вычисляемых идеальный вариант.You must then call the AutoResizeColumns method to adjust the column widths to the calculated ideal.

Параметры изменения размеров на основе содержимогоContent-based Sizing Options

Перечисления, используемые свойствами изменения размеров и методы имеют одинаковые значения для изменения размеров на основе содержимого.The enumerations used by sizing properties and methods have similar values for content-based sizing. Эти значения можно ограничить ячейки, которые используются для вычисления желаемые размеры.With these values, you can limit which cells are used to calculate the preferred sizes. Для всех перечислений изменения размеров значения с именами, которые ссылаются на отображаемых ячеек ограничивают вычисления ячейками в отображаемых строках.For all sizing enumerations, values with names that refer to displayed cells limit their calculations to cells in displayed rows. За исключением строк способ позволяет избежать снижения производительности при работе с большим числом строк.Excluding rows is useful to avoid a performance penalty when you are working with a large quantity of rows. Также можно ограничить вычисления значения в ячейках заголовка или ячейки.You can also restrict calculations to cell values in header or nonheader cells.

См. такжеSee also