Стили ячеек элемента управления DataGridView в Windows Forms
Каждая ячейка в элементе управления DataGridView может иметь собственный стиль, например формат текста, цвет фона, цвет переднего плана и шрифт. Однако обычно несколько ячеек имеют общие характеристики стиля.
Группы ячеек с общими стилями могут включать в себя все ячейки в определенных строках или столбцах, все ячейки с определенными значениями или все ячейки в элементе управления. Так как эти группы перекрываются, каждая ячейка может получать сведения о стиле из нескольких мест. Например, может потребоваться, чтобы все ячейки в элементе управления DataGridView имели один и тот же шрифт, но только ячейки в столбцах с денежными значениями имели денежный формат и только ячейки с отрицательными денежными значениями имели красный цвет переднего плана.
Класс DataGridViewCellStyle
Класс DataGridViewCellStyle содержит следующие свойства, связанные с визуальным стилем:
Класс также содержит следующие свойства, связанные с форматированием:
Дополнительные сведения об этих и других свойствах стиля ячеек см. в справочной документации DataGridViewCellStyle и разделах, перечисленных в разделе "См. также" ниже.
Использование объектов DataGridViewCellStyle
Объекты DataGridViewCellStyle можно получать из различных свойств классов DataGridView, DataGridViewColumn, DataGridViewRow и DataGridViewCell, а также их производных классов. Если одно из этих свойств еще не задано, при получении его значения создается новый объект DataGridViewCellStyle. Можно также создавать собственные объекты DataGridViewCellStyle и присваивать их этим свойствам.
Избежать ненужного дублирования сведений о стиле можно путем совместного использования объектов DataGridViewCellStyle несколькими элементами DataGridView. Так как стили, заданные на уровне элемента управления, столбцов и строк, отфильтровываются на каждом уровне до уровня ячейки, избежать дублирования сведений о стиле можно также путем задания только тех свойств стиля на каждом уровне, которые отличаются от свойств на уровнях выше. Более подробно это описано в разделе "Наследование стилей" далее.
В таблице ниже перечислены основные свойства, которые получают или задают объекты DataGridViewCellStyle.
Свойство | Классы | Description |
---|---|---|
DefaultCellStyle |
DataGridView, DataGridViewColumn, DataGridViewRow и производные классы | Возвращает или задает стили по умолчанию, используемые всеми ячейками в элементе управления (включая ячейки заголовков), столбце или строке. |
RowsDefaultCellStyle | DataGridView | Возвращает или задает стили ячеек по умолчанию, используемые всеми строками в элементе управления. Сюда не входят ячейки заголовков. |
AlternatingRowsDefaultCellStyle | DataGridView | Возвращает или задает стили ячеек по умолчанию, используемые чередующимися строками в элементе управления. Используется для создания эффекта бухгалтерской книги. |
RowHeadersDefaultCellStyle | DataGridView | Возвращает или задает стили ячеек по умолчанию, используемые заголовками строк в элементе управления. Переопределяется текущей темой, если включены визуальные стили. |
ColumnHeadersDefaultCellStyle | DataGridView | Возвращает или задает стили ячеек по умолчанию, используемые заголовками столбцов в элементе управления. Переопределяется текущей темой, если включены визуальные стили. |
Style | DataGridViewCell и производные классы | Возвращает или задает стили, указанные на уровне ячейки. Эти стили переопределяют унаследованные от более высоких уровней. |
InheritedStyle |
DataGridViewCell, DataGridViewRow, DataGridViewColumn и производные классы | Возвращает все стили, применяемые в настоящее время к ячейке, строке или столбцу, включая стили, унаследованные от более высоких уровней. |
Как упоминалось выше, при получении значения свойства стиля, которое не было задано ранее, автоматически создается новый объект DataGridViewCellStyle. Чтобы избежать ненужного создания этих объектов, классы строк и столбцов имеют свойство HasDefaultCellStyle, с помощью которого можно проверить, задано ли свойство DefaultCellStyle. Аналогичным образом, классы ячеек имеют свойство HasStyle, указывающее, задано ли свойство Style.
Каждое из свойств стиля имеет в элементе управления DataGridView соответствующее событие ИмяСвойстваChanged
. Для свойств строки, столбца и ячейки имя события начинается с Row
, Column
или Cell
(например, RowDefaultCellStyleChanged). Каждое из этих событий возникает, когда соответствующему свойству стиля присваивается другой объект DataGridViewCellStyle. Эти события не происходят при получении объекта DataGridViewCellStyle из свойства стиля и изменении значений его свойств. Для реагирования на изменения самих объектов стиля ячеек, обрабатывайте событие CellStyleContentChanged.
Наследование стилей
Внешний вид каждого объекта DataGridViewCell определяется свойством InheritedStyle. Объект DataGridViewCellStyle, возвращаемый этим свойством, наследует значения от иерархии свойств типа DataGridViewCellStyle. Эти свойства перечислены ниже в порядке, в котором InheritedStyle для ячеек, не являющихся заголовками, получает свои значения.
DataGridView.AlternatingRowsDefaultCellStyle (только для ячеек в строках с нечетными индексами)
Для ячеек заголовков строк и столбцов свойство InheritedStyle заполняется значениями из следующего списка исходных свойств в указанном порядке.
Этот процесс представлен на схеме ниже.
Вы также можете получить доступ к стилям, унаследованным определенными строками и столбцами. Свойство InheritedStyle столбца наследует значения от следующих свойств:
Свойство InheritedStyle строки наследует значения от следующих свойств:
DataGridView.AlternatingRowsDefaultCellStyle (только для ячеек в строках с нечетными индексами)
Для каждого свойства в объекте DataGridViewCellStyle, возвращаемом свойством InheritedStyle
, значение получается из первого стиля ячейки в соответствующем списке, свойство которого имеет значение, отличное от значений класса DataGridViewCellStyle по умолчанию.
В таблице ниже показано, как значение свойства ForeColor для примера ячейки наследуется от содержащего ее столбца.
Свойство типа DataGridViewCellStyle |
Пример значения ForeColor для полученного объекта |
---|---|
DataGridViewCell.Style | Color.Empty |
DataGridViewRow.DefaultCellStyle | Color.Red |
DataGridView.AlternatingRowsDefaultCellStyle | Color.Empty |
DataGridView.RowsDefaultCellStyle | Color.Empty |
DataGridViewColumn.DefaultCellStyle | Color.DarkBlue |
DataGridView.DefaultCellStyle | Color.Black |
В этом случае значение Color.Red из строки ячейки является первым реальным значением в списке. Оно становится значением свойства ForeColor для InheritedStyle ячейки.
На схеме ниже показано, как различные свойства DataGridViewCellStyle могут наследовать значения из разных мест.
Используя наследование стилей, вы можете предоставить подходящие стили для всего элемента управления, не указывая одни и те же сведения в нескольких местах.
Хотя ячейки заголовков участвуют в наследовании стилей, как описано выше, объекты, возвращаемые свойствами ColumnHeadersDefaultCellStyle и RowHeadersDefaultCellStyle элемента управления DataGridView, имеют начальные значения свойств, которые переопределяют значения свойств объекта, возвращаемого свойством DefaultCellStyle. Если нужно, чтобы свойства, которые заданы для объекта, возвращаемого свойством DefaultCellStyle, применялись к заголовкам строк и столбцов, необходимо присвоить соответствующим свойствам объектов, возвращаемых свойствами ColumnHeadersDefaultCellStyle и RowHeadersDefaultCellStyle, значения по умолчанию, указанные для класса DataGridViewCellStyle.
Примечание.
Если включены визуальные стили, стили заголовков строк и столбцов (за исключением TopLeftHeaderCell) автоматически определяются текущей темой, которая переопределяет все стили, заданные этими свойствами.
Типы DataGridViewButtonColumn, DataGridViewImageColumn и DataGridViewCheckBoxColumn также инициализируют некоторые значения объекта, возвращаемого свойством DefaultCellStyle столбца. Дополнительные сведения см. в справочной документации по этим типам.
Динамическое задание стилей
Чтобы настроить для стилей ячеек определенные значения, реализуйте обработчик события DataGridView.CellFormatting. Обработчики этого события получают аргумент типа DataGridViewCellFormattingEventArgs. Этот объект содержит свойства, которые позволяют определить значение форматируемой ячейки, а также ее расположение в элементе управления DataGridView. Этот объект также содержит свойство CellStyle, инициализируемое значением свойства InheritedStyle форматируемой ячейки. Вы можете изменить свойства стиля ячеек, чтобы указать сведения о стиле, соответствующие значению и расположению ячейки.
Примечание.
События RowPrePaint и RowPostPaint также получают объект DataGridViewCellStyle в данных события, но в их случае это копия свойства InheritedStyle строки только для чтения. Изменения этого объекта не влияют на элемент управления.
Вы также можете динамически изменять стили отдельных ячеек в ответ на такие события, как DataGridView.CellMouseEnter и CellMouseLeave. Например, в обработчике события CellMouseEnter можно сохранить текущее значение цвета фона ячейки (полученное через свойство Style ячейки), а затем задать новый цвет для выделения ячейки при наведении указателя мыши на нее. Затем в обработчике события CellMouseLeave можно восстановить исходный цвет фона.
Примечание.
Кэширование значений, хранящихся в свойстве Style ячейки, важно независимо от того, задано ли определенное значение стиля. Если вы временно измените параметр стиля, восстановление его исходного состояния "не задано" гарантирует, что ячейка будет снова наследовать параметр стиля от более высокого уровня. Если необходимо определить фактический стиль, применяемый к ячейке, независимо от того, наследуется ли он, используйте свойство InheritedStyle ячейки.
См. также
- DataGridView
- DataGridViewCellStyle
- DataGridView.AlternatingRowsDefaultCellStyle
- DataGridView.ColumnHeadersDefaultCellStyle
- DataGridView.DefaultCellStyle
- DataGridView.RowHeadersDefaultCellStyle
- DataGridView.RowsDefaultCellStyle
- DataGridViewBand.InheritedStyle
- DataGridViewRow.InheritedStyle
- DataGridViewColumn.InheritedStyle
- DataGridViewBand.DefaultCellStyle
- DataGridViewCell.InheritedStyle
- DataGridViewCell.Style
- DataGridView.CellFormatting
- DataGridView.CellStyleContentChanged
- DataGridView.RowPrePaint
- DataGridView.RowPostPaint
- Базовое форматирование и оформление элемента управления DataGridView в Windows Forms
- Практическое руководство. Установка стилей ячейки по умолчанию для элемента управления DataGridView в Windows Forms
- Форматирование данных в элементе управления DataGridView в Windows Forms
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по