Изменение размеров управления 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для значение Resizable и дляFalse столбца. NoneSet 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. Если значение включает флаг, Resizable значение свойства не наследуется. ResizableSet StateIf 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. Дополнительные сведения об этом режиме см. в разделе режим заполнения столбца в элементе управления Windows Forms DataGridView.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 свойства значение, отличное от. NotSetTo 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