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


Стили ячеек в элементе управления DataGridView в Windows Forms

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

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

Класс DataGridViewCellStyle

Класс DataGridViewCellStyle содержит следующие свойства, связанные с визуальным стилем:

Этот класс также содержит следующие свойства, связанные с форматированием:

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

Использование объектов DataGridViewCellStyle

Объекты DataGridViewCellStyle можно получить из различных свойств DataGridView, DataGridViewColumn, DataGridViewRowи DataGridViewCell классов и их производных классов. Если одно из этих свойств еще не задано, извлечение его значения создаст новый объект DataGridViewCellStyle. Вы также можете создать экземпляры собственных DataGridViewCellStyle объектов и присвоить их этим свойствам.

Вы можете избежать ненужного дублирования сведений о стиле, предоставляя доступ к объектам DataGridViewCellStyle между несколькими элементами DataGridView. Так как стили, заданные на уровне элементов управления, столбца и строк, фильтруются по каждому уровню до уровня ячейки, можно также избежать дублирования стилей, задав только те свойства стиля на каждом уровне, который отличается от указанных выше уровней. Это описано более подробно в разделе "Наследование стилей", приведенном ниже.

В следующей таблице перечислены основные свойства, которые получают или задают объекты DataGridViewCellStyle.

Недвижимость Классы Описание
DefaultCellStyle DataGridView, DataGridViewColumn, DataGridViewRowи производные классы Возвращает или задает стили по умолчанию, используемые всеми ячейками во всем элементе управления (включая ячейки заголовков), в столбце или строке.
RowsDefaultCellStyle DataGridView Возвращает или задает стили ячеек по умолчанию, используемые всеми строками в элементе управления. Это не включает ячейки заголовков.
AlternatingRowsDefaultCellStyle DataGridView Возвращает или задает стили ячеек по умолчанию, используемые чередованием строк в элементе управления. Используется для создания эффекта, аналогичного реестру.
RowHeadersDefaultCellStyle DataGridView Возвращает или задает стили ячеек по умолчанию, используемые заголовками строк элемента управления. Переопределяется текущей темой, если визуальные стили включены.
ColumnHeadersDefaultCellStyle DataGridView Возвращает или задает стили ячеек по умолчанию, используемые заголовками столбцов элемента управления. Переопределяется текущей темой, если визуальные стили включены.
Style DataGridViewCell и производные классы Возвращает или задает стили, указанные на уровне ячейки. Эти стили переопределяют те, которые наследуются от более высоких уровней.
InheritedStyle DataGridViewCell, DataGridViewRow, DataGridViewColumnи производные классы Получает все стили, применяемые к ячейке, строке или столбцу, включая стили, унаследованные от более высоких уровней.

Как упоминалось выше, получение значения свойства стиля автоматически создает новый экземпляр объекта DataGridViewCellStyle, если свойство не было установлено ранее. Чтобы избежать ненужного создания этих объектов, классы строк и столбцов имеют свойство HasDefaultCellStyle, которое можно проверить, чтобы определить, задано ли свойство DefaultCellStyle. Аналогичным образом классы ячеек имеют свойство HasStyle, указывающее, задано ли свойство Style.

Каждое из свойств стиля имеет соответствующее событие PropertyNameChanged в элементе управления DataGridView. Для свойств строк, столбцов и ячеек имя события начинается с "Row", "Column" или "Cell" (например, RowDefaultCellStyleChanged). Каждое из этих событий возникает, когда соответствующее свойство стиля устанавливается на другой объект DataGridViewCellStyle. Эти события не происходят при получении объекта DataGridViewCellStyle из свойства стиля и изменении его значений свойств. Чтобы реагировать на изменения объектов стиля ячеек, обработайте событие CellStyleContentChanged.

Наследование стилей

Каждый DataGridViewCell получает свой внешний вид из свойства InheritedStyle. Объект DataGridViewCellStyle, возвращаемый этим свойством, наследует его значения из иерархии свойств типа DataGridViewCellStyle. Эти свойства перечислены ниже в порядке, в котором InheritedStyle для незаголовочных ячеек приобретает свои значения.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (только для ячеек в строках с нечетными номерами индекса)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Для ячеек заголовков строк и столбцов свойство InheritedStyle заполняется значениями из следующего списка исходных свойств в указанном порядке.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle или DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

На следующей схеме показан этот процесс.

Свойства типа DataGridViewCellStyle

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

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

Свойство строки InheritedStyle наследует значения из следующих свойств.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (только для ячеек в строках с нечетными номерами индекса)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Для каждого свойства в объекте 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 из строки ячейки является первым реальным значением в списке. Это становится значением свойства ForeColorInheritedStyleячейки.

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

наследование свойств DataGridView

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

Хотя ячейки заголовков участвуют в наследовании стилей, объекты, которые возвращаются свойствами 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 ячейки.

См. также