Поделиться через


Изменение размеров управления DataGridView в Windows Forms

Обновлен: Ноябрь 2007

Размер строк, столбцов и заголовков может изменяться DataGridView во многих случаях. В следующей таблице описаны условия, при которых происходит изменение размеров.

Условие

Описание

Изменение размеров пользователем

Пользователи могут изменять размеры при помощи перетаскивания или по двойному щелчку разделителей строки, столбца или заголовка.

Изменение размеров элемента управления

В режиме заполнения столбца его ширина изменяется с изменением ширины элемента управления; например, когда элемент управления закреплен в родительской форме и пользователь изменяет размер формы.

Изменение значения ячейки

В режимах автоматического изменения размеров в зависимости от содержимого, размеры изменяются таким образом, чтобы отобразить новые значения.

Вызов метода

Изменение размеров в зависимости от программного содержимого позволяет в момент вызова метода добиться гибкой корректировки размеров в зависимости от значений в ячейке.

Параметр свойства

Точные значения высоты и ширины можно установить.

По умолчанию изменение размеров пользователем включено, а автоматическое изменение размеров отключено, и значения в ячейках, не помещающиеся в границах столбцов, обрезаются.

В следующей таблице показаны сценарии, которые можно использовать для изменения поведения по умолчанию; для достижения определенных эффектов можно использовать определенные параметры изменения размеров.

Сценарий

Реализация

Использование режима заполнения столбца для отображения данных с таким же размером в относительно небольшом числе столбцов, занимающих всю ширину элемента управления без отображения горизонтальной полосы прокрутки.

Установите для свойства AutoSizeColumnsMode значение Fill.

Использование режима заполнения столбца с отображением значений различных размеров.

Установите для свойства AutoSizeColumnsMode значение Fill. Инициализируйте относительную ширину столбцов, установив свойства FillWeight столбцов или вызвав метод AutoResizeColumns элемента управления после заполнения элемента управления данными.

Использование режима заполнения со значениями различной важности.

Установите для свойства AutoSizeColumnsMode значение Fill. Установите большие значения MinimumWidth для столбцов, в которых всегда должна отображаться часть данных, или для определенных столбцов используйте параметр изменения размера, отличный от режима заполнения.

Использование режима заполнения столбца таким образом, чтобы фон элемента управления не отображался.

Присвойте свойству AutoSizeMode последнего столбца значение Fill и используйте другие параметры изменения размеров для других столбцов. Если другие столбцы занимают слишком большую часть доступного пространства, установите свойство MinimumWidth последнего столбца.

Отображение столбца фиксированной ширины, например столбца со значком или идентификатором.

Свойству AutoSizeMode присвойте значение None, свойству Resizable — значение False для столбца. Инициализируйте его ширину, установив свойство Width или вызвав метод AutoResizeColumn элемента управления после заполнения элемента управления данными.

Автоматическое изменение размеров в случае изменения содержимого ячейки, чтобы исключить усечение и оптимизировать пространство.

Свойству автоматического изменения размеров присвойте значение, представляющее режим изменения размеров в соответствии с содержимым. Чтобы избежать снижения производительности при работе с большими объемами данных, используйте режим изменения размеров, при котором рассчитываются только отображаемые строки.

Изменение размеров в зависимости от значений в отображаемых строках так, чтобы избежать снижения производительности при работе с большим числом строк.

Используйте соответствующие значения перечисления режима изменения размеров с автоматическим или программным изменением размеров. Чтобы подстроить размеры под значения во вновь отображаемых строках при прокрутке, вызовите метод изменения размеров в обработчике событий Scroll. Чтобы настроить изменение размеров при двойном щелчке пользователем так, чтобы только значения в отображаемых строках определяли новые размеры, вызовите метод изменения размеров в обработчике событий RowDividerDoubleClick или ColumnDividerDoubleClick.

Изменение размеров в зависимости от содержимого в ячейках только в определенные моменты времени так, чтобы исключить снижение производительности или задействовать изменение размеров пользователем.

Вызовите метод изменения размеров в зависимости от содержимого в обработчике событий. Например, используйте событие DataBindingComplete для инициализации размеров после привязки и обработайте событие CellValidated или CellValueChanged, чтобы скорректировать размеры для поправки на редактирование пользователем или изменения в связанном источнике данных.

Изменение высоты строк для многострочного содержимого ячеек.

Удостоверьтесь, что ширина столбцов достаточна для отображения параграфов текста, или для изменения высоты используйте автоматическое или программное изменение размеров в зависимости от содержимого. Также убедитесь, что ячейки с многострочным содержимым отображаются со значением стиля ячейки WrapMode равным True.

Как правило, для сохранения ширины столбцов потребуется использовать режим автоматического изменения размеров столбцов или назначить им определенную ширину перед изменением высоты строк.

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

По умолчанию пользователи могут изменять размеры строк, столбцов и заголовков, для которых не используется режим автоматического изменения размеров в зависимости от значений в ячейках. Чтобы пользователи не могли изменять размеры в других режимах, например в режиме заполнения столбцов, необходимо установить одно из следующих свойств DataGridView:

Можно также запретить пользователям изменять размеры отдельных строк или столбцов, установив их значения Resizable. По умолчанию значение свойства Resizable основано на значении свойства AllowUserToResizeColumns для столбцов и значении свойства AllowUserToResizeRows для строк. Однако если для свойства Resizable явным образом установлено значение True или False, указанное значение переопределяет значение элемента управления для такой строки или столбца. Чтобы восстановить наследование, свойству Resizable необходимо присвоить значение NotSet.

Поскольку NotSet восстанавливает наследование значения, свойство Resizable не будет возвращать значение NotSet, пока строка или столбец не будут добавлены в элемент управления DataGridView. Если необходимо установить, наследуется ли значение свойства Resizable для строки или столбца, проверьте свойство State. Если значение State содержит флаг ResizableSet, значение свойства Resizable не наследуется.

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

Существует два типа автоматического изменения размеров в элементе управления DataGridView: режим заполнения столбца и автоматическое изменение размеров в зависимости от содержимого.

В режиме заполнения столбца видимые столбцы в элементе управления заполняют ширину отображаемой области элемента управления. Дополнительные сведения об этом режиме см. в разделе Установка режимов заполнения для столбцов элемента управления DataGridView в Windows Forms.

Строки, столбцы и заголовки можно также настроить на автоматическое изменение размеров в зависимости от содержимого. В этом случае размеры изменяются при каждом изменении содержимого ячейки.

74b2wakt.alert_note(ru-ru,VS.90).gifПримечание.

Если значения ячеек хранятся в пользовательском кэше данных в виртуальном режиме, автоматическое изменение размеров происходит, когда пользователь редактирует значение ячейки, и не возникает, если значение в кэше изменяется вне обработчика событий CellValuePushed. В этом случае, необходимо вызвать метод UpdateCellValue для принудительного обновления отображения ячейки элементом управления и применения текущих режимов автоматического изменения размеров.

Если автоматическое изменение размеров в зависимости от содержимого включено только для одного измерения, то есть для строк, а не столбцов или наоборот, и WrapMode также включен, размер изменяется при каждом изменении другого измерения. Например, если автоматическое изменение размеров настроено для строк, а не столбцов и режим WrapMode включен, пользователи смогут перетаскивать разделители столбцов, изменяя ширину столбца, и высота строк будет также изменяться автоматически таким образом, чтобы содержимое ячеек отображалось целиком.

Если автоматическое изменение размеров в зависимости от содержимого настроено как для столбцов, так и для строк и WrapMode включен, размеры элемента управления DataGridView будут изменяться каждый раз при изменении содержимого ячеек, и новые размеры будут рассчитываться на основе идеального соотношения высоты и ширины ячейки.

Чтобы настроить режим изменения размеров для заголовков и строк, а также для столбцов, которые не переопределяют значение элемента управления, установите одно или несколько свойств DataGridView:

Чтобы переопределить режим изменения размеров столбца элемента управления для отдельного столбца, его свойству AutoSizeMode следует присвоить значение, отличное от NotSet. Режим изменения размеров для столбца фактически определяется его свойством InheritedAutoSizeMode. Значение этого свойства основано на значении свойства AutoSizeMode столбца, если оно не равно NotSet, в случае чего наследуется значение AutoSizeColumnsMode элемента управления.

При работе с большими объемами данных следует с осторожностью использовать автоматическое изменение размеров в зависимости от содержимого. Во избежание снижения производительности используйте режимы автоматического изменения размеров, которые рассчитывают размеры только на основе отображаемых строк, а не посредством оценки каждой строки в элементе управления. Для обеспечения максимальной производительности предпочтительней использовать программное изменение размеров, так чтобы изменять размеры можно было в определенное время, например сразу после загрузки новых данных.

Режимы автоматического изменения размеров на основе содержимого не затрагивают строки, столбцы или заголовки, которые скрыты путем установки свойства Visible строки или столбца, или свойств RowHeadersVisible или ColumnHeadersVisible элемента управления равным false. Например, если столбец был скрыт после того, как его размер был автоматически изменен для вмещения большого значения ячейки, размер скрытого столбца не изменится, если удалить строку с большим значением ячейки. Автоматическое изменение размеров не происходит при изменении режима видимости, поэтому изменение свойства Visible столбца на прежнее значение true не приведет к пересчету его размера на основе текущего содержимого.

Программное изменение размеров в зависимости от содержимого влияет на все строки, столбцы и заголовки независимо от их видимости.

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

Если автоматическое изменение размеров отключено, точную ширину или высоту строк, столбцов или заголовков можно установить программно при помощи следующих свойств:

Размер строк, столбцов и заголовков можно также программно изменить в соответствии с их содержимым с помощью следующих методов.

Эти методы изменяют размеры строк, столбцов или заголовков один раз и не настроены на постоянное изменение размеров. Новые размеры рассчитываются автоматически для отображения любого содержимого ячеек без усечения. Однако если программно изменить размеры столбцов, значения свойства InheritedAutoSizeMode которых равны Fill, полученные значения ширины согласно содержимому используются для пропорционального изменения значений свойства FillWeight, и фактические значения ширины столбцов затем рассчитываются по этим новым соотношениям, так что все столбцы заполняют доступную область отображения элемента управления.

Программное изменение размеров позволяет избежать снижения производительности при постоянном изменении размеров. Это также позволяет задавать начальные размеры для строк, столбцов и заголовков, размеры которых может изменять пользователь, и подходит для режима заполнения столбца.

Методы программного изменения размеров, как правило, вызываются в определенные моменты времени. Например, программно можно изменить размеры всех столбцов сразу после загрузки данных, или изменить размер заданной строки после изменения определенного значения ячейки.

Настройка поведения изменения размеров в зависимости от содержимого

Поведение изменения размеров можно настроить при работе с производными типами DataGridView, ячейки, строки или столбца, переопределив методы DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight или DataGridViewColumn.GetPreferredWidth или вызвав защищенные перегрузки методов изменения размеров в производном элементе управления DataGridView. Защищенные перегрузки методов изменения размеров предназначены для работы в парах для достижения идеального соотношения высоты и ширины, исключая слишком широкие или высокие ячейки. Например, если вызвать перегрузку AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) метода AutoResizeRows и подставить значение false для параметра Boolean, перегрузка рассчитает идеальную высоту и ширину для ячеек в строке, но изменит только высоту строк. Затем нужно вызвать метод AutoResizeColumns, чтобы подстроить ширину столбцов под рассчитанное идеальное значение.

Параметры изменения размеров в зависимости от содержимого

Перечисления, используемые свойствами изменения размеров и методами, имеют одинаковые значения для изменения размеров в зависимости от содержимого. Используя эти значения, можно ограничить ячейки, которые используются для вычисления предпочтительного размера. Для всех перечислений изменения размеров значения с именами, относящимися к отображаемым ячейкам, ограничивают вычисления ячейками в отображаемых строках. Исключение строк поможет избежать снижения производительности при работе с большим числом строк. Вычисления можно также ограничить значениями ячеек в ячейках заголовка или других ячейках.

См. также

Задачи

Практическое руководство. Режимы изменения размеров элемента управления DataGridView в Windows Forms

Основные понятия

Установка режимов заполнения для столбцов элемента управления DataGridView в Windows Forms

Ссылки

DataGridView

DataGridView.AllowUserToResizeColumns

DataGridView.AllowUserToResizeRows

DataGridView.ColumnHeadersHeightSizeMode

DataGridView.RowHeadersWidthSizeMode

DataGridViewBand.Resizable

DataGridView.AutoSizeColumnsMode

DataGridView.AutoSizeRowsMode

DataGridViewColumn.AutoSizeMode

DataGridViewColumn.InheritedAutoSizeMode

DataGridView.RowHeadersWidth

DataGridView.ColumnHeadersHeight

DataGridViewRow.Height

DataGridViewColumn.Width

DataGridView.AutoResizeColumn

DataGridView.AutoResizeColumns

DataGridView.AutoResizeColumnHeadersHeight

DataGridView.AutoResizeRow

DataGridView.AutoResizeRows

DataGridView.AutoResizeRowHeadersWidth

DataGridViewAutoSizeRowMode

DataGridViewAutoSizeRowsMode

DataGridViewAutoSizeColumnMode

DataGridViewAutoSizeColumnsMode

DataGridViewColumnHeadersHeightSizeMode

DataGridViewRowHeadersWidthSizeMode

Другие ресурсы

Изменение размера столбцов и строк элемента управления DataGridView в Windows Forms