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


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

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

Каждая ячейка в элементе управления 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.

Для каждого свойства стиля есть соответствующее событие ИмяСвойстваChanged в элементе управления 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 из строки ячейки является первым действительным значением в списке. Оно становится значением свойства ForeColor стиля ячейки InheritedStyle.

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

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

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

Ячейки заголовка участвуют в описанном наследовании стиля, однако объекты, возвращенные свойствами ColumnHeadersDefaultCellStyle и RowHeadersDefaultCellStyle элемента управления DataGridView, имеют начальные значения, которые заменяют значения объекта, возвращенные свойством DefaultCellStyle. Если требуется, чтобы свойства объекта, возвращаемые свойством DefaultCellStyle, применялись к заголовкам строк и столбцов, нужно установить для соответствующих поставщиков объектов, возвращаемых свойствами ColumnHeadersDefaultCellStyle и RowHeadersDefaultCellStyle, значения по умолчанию, указанные для класса DataGridViewCellStyle.

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

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

Типы DataGridViewButtonColumn, DataGridViewImageColumn и DataGridViewCheckBoxColumn также инициализируют некоторые значения объекта, возвращенного свойством столбца DefaultCellStyle. Дополнительные сведения см. в справочной документации для этих типов.

Динамическая установка стилей

Чтобы настроить стиль ячеек с использованием определенных значений, реализуйте обработчик для события DataGridView.CellFormatting. Обработчики этого события получают аргумент типа DataGridViewCellFormattingEventArgs. Этот объект содержит свойства, позволяющие определить значение форматируемой ячейки, а также ее расположение в элементе управления DataGridView. Этот объект также содержит свойство CellStyle, которое при инициализации получает значение свойства InheritedStyle форматируемой ячейки. Можно изменить свойства стиля ячейки и указать данные стиля в соответствии со значением ячейки и ее расположением.

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

События RowPrePaint и RowPostPaint также получают объект DataGridViewCellStyle в данных события, но в этом случае это копия свойства строки InheritedStyle, доступная только для чтения; ее изменения не влияют на элемент управления.

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

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

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

См. также

Задачи

Практическое руководство. Установка стилей ячейки по умолчанию для элемента управления DataGridView в Windows Forms

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

Форматирование данных в элементе управления DataGridView в Windows Forms

Ссылки

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