Стили ячеек элемента управления DataGridView в Windows FormsCell Styles in the Windows Forms DataGridView Control

Каждая ячейка в DataGridView элементе управления может иметь собственный стиль, например текстовый формат, цвет фона, цвет переднего плана и шрифт.Each cell within the DataGridView control can have its own style, such as text format, background color, foreground color, and font. Однако обычно несколько ячеек будут иметь определенные характеристики стиля.Typically, however, multiple cells will share particular style characteristics.

Группы ячеек с общими стилями могут включать в себя все ячейки в определенных строках или столбцах, все ячейки, содержащие определенные значения, или все ячейки в элементе управления.Groups of cells that share styles may include all cells within particular rows or columns, all cells that contain particular values, or all cells in the control. Поскольку эти группы перекрываются, каждая ячейка может получать сведения о стилях из нескольких мест.Because these groups overlap, each cell may get its styling information from more than one place. Например, может потребоваться, чтобы каждая ячейка в DataGridView элементе управления использовала один и тот же шрифт, но только ячейки в столбцах валюты используют формат валюты и только ячейки валюты с отрицательными числами будут использовать красный цвет переднего плана.For example, you may want every cell in a DataGridView control to use the same font, but only cells in currency columns to use currency format, and only currency cells with negative numbers to use a red foreground color.

Класс ДатагридвиевцеллстилеThe DataGridViewCellStyle Class

DataGridViewCellStyle Класс содержит следующие свойства, связанные с визуальным стилем:The DataGridViewCellStyle class contains the following properties related to visual style:

Этот класс также содержит следующие свойства, связанные с форматированием:This class also contains the following properties related to formatting:

Дополнительные сведения об этих свойствах и других свойствах в стиле ячейки см. DataGridViewCellStyle в справочной документации и в разделах, перечисленных в разделе "см. также" ниже.For more information on these properties and other cell-style properties, see the DataGridViewCellStyle reference documentation and the topics listed in the See Also section below.

Использование объектов ДатагридвиевцеллстилеUsing DataGridViewCellStyle Objects

Можно извлечь DataGridViewCellStyle объекты из различных свойств DataGridViewклассов, DataGridViewColumn, DataGridViewRowи DataGridViewCell и их производных классов.You can retrieve DataGridViewCellStyle objects from various properties of the DataGridView, DataGridViewColumn, DataGridViewRow, and DataGridViewCell classes and their derived classes. Если одно из этих свойств еще не задано, при извлечении его значения будет создан новый DataGridViewCellStyle объект.If one of these properties has not yet been set, retrieving its value will create a new DataGridViewCellStyle object. Можно также создать экземпляры собственных DataGridViewCellStyle объектов и назначить их этим свойствам.You can also instantiate your own DataGridViewCellStyle objects and assign them to these properties.

Чтобы избежать ненужного дублирования сведений о стиле DataGridViewCellStyle , можно совместно DataGridView использовать объекты из нескольких элементов.You can avoid unnecessary duplication of style information by sharing DataGridViewCellStyle objects among multiple DataGridView elements. Поскольку стили, заданные на уровнях элементов управления, столбцов и строк, фильтруются по уровням ячеек, можно также избежать дублирования стилей, задав только свойства стиля на каждом уровне, отличающемся от уровней выше.Because the styles set at the control, column, and row levels filter down through each level to the cell level, you can also avoid style duplication by setting only those style properties at each level that differ from the levels above. Это описано более подробно в разделе Наследование стилей ниже.This is described in more detail in the Style Inheritance section that follows.

В следующей таблице перечислены основные свойства, которые получают или устанавливают DataGridViewCellStyle объекты.The following table lists the primary properties that get or set DataGridViewCellStyle objects.

Свойство.Property КлассыClasses ОписаниеDescription
DefaultCellStyle DataGridView, DataGridViewColumn,ипроизводныеклассы DataGridViewRowDataGridView, DataGridViewColumn, DataGridViewRow, and derived classes Возвращает или задает стили по умолчанию, используемые всеми ячейками во всем элементе управления (включая ячейки заголовка), в столбце или в строке.Gets or sets default styles used by all cells in the entire control (including header cells), in a column, or in a row.
RowsDefaultCellStyle DataGridView Возвращает или задает стили ячеек по умолчанию, используемые всеми строками в элементе управления.Gets or sets default cell styles used by all rows in the control. Сюда не входят ячейки заголовка.This does not include header cells.
AlternatingRowsDefaultCellStyle DataGridView Возвращает или задает стили ячеек по умолчанию, используемые в чередующихся строках элемента управления.Gets or sets default cell styles used by alternating rows in the control. Используется для создания результата, аналогичного ГК.Used to create a ledger-like effect.
RowHeadersDefaultCellStyle DataGridView Возвращает или задает стили ячеек по умолчанию, используемые заголовками строк элемента управления.Gets or sets default cell styles used by the control's row headers. Переопределяется текущей темой, если включены стили оформления.Overridden by the current theme if visual styles are enabled.
ColumnHeadersDefaultCellStyle DataGridView Возвращает или задает стили ячеек по умолчанию, используемые заголовками столбцов элемента управления.Gets or sets default cell styles used by the control's column headers. Переопределяется текущей темой, если включены стили оформления.Overridden by the current theme if visual styles are enabled.
Style DataGridViewCellи производные классыDataGridViewCell and derived classes Возвращает или задает стили, заданные на уровне ячейки.Gets or sets styles specified at the cell level. Эти стили переопределяют те, которые унаследованы от более высоких уровней.These styles override those inherited from higher levels.
InheritedStyle DataGridViewCell, DataGridViewRow,ипроизводныеклассы DataGridViewColumnDataGridViewCell, DataGridViewRow, DataGridViewColumn, and derived classes Возвращает все стили, применяемые в данный момент к ячейке, строке или столбцу, включая стили, унаследованные от более высоких уровней.Gets all the styles currently applied to the cell, row, or column, including styles inherited from higher levels.

Как упоминалось выше, при получении значения свойства Style автоматически создается экземпляр нового DataGridViewCellStyle объекта, если свойство не было задано ранее.As mentioned above, getting the value of a style property automatically instantiates a new DataGridViewCellStyle object if the property has not been previously set. Чтобы не создавать эти объекты без необходимости, классы строк и столбцов имеют HasDefaultCellStyle свойство, которое можно проверить, чтобы определить, было DefaultCellStyle ли установлено свойство.To avoid creating these objects unnecessarily, the row and column classes have a HasDefaultCellStyle property that you can check to determine whether the DefaultCellStyle property has been set. Аналогичным образом, классы ячеек имеют HasStyle свойство, указывающее, задано Style ли свойство.Similarly, the cell classes have a HasStyle property that indicates whether the Style property has been set.

Каждое из свойств стиля имеет соответствующее событие PropertyName Changed в DataGridView элементе управления.Each of the style properties has a corresponding PropertyNameChanged event on the DataGridView control. Для свойств строк, столбцов и ячеек имяRowсобытия начинается с "", "Column" или "Cell" (например, RowDefaultCellStyleChanged).For row, column, and cell properties, the name of the event begins with "Row", "Column", or "Cell" (for example, RowDefaultCellStyleChanged). Каждое из этих событий возникает, когда соответствующему свойству Style присвоено DataGridViewCellStyle значение другого объекта.Each of these events occurs when the corresponding style property is set to a different DataGridViewCellStyle object. Эти события не возникают при извлечении DataGridViewCellStyle объекта из свойства Style и изменении его значений свойств.These events do not occur when you retrieve a DataGridViewCellStyle object from a style property and modify its property values. Чтобы реагировать на изменения самих объектов стиля ячейки, обрабатывайте CellStyleContentChanged событие.To respond to changes to the cell style objects themselves, handle the CellStyleContentChanged event.

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

Каждый DataGridViewCell из них получает свой внешний InheritedStyle вид из своего свойства.Each DataGridViewCell gets its appearance from its InheritedStyle property. Объект, возвращаемый этим свойством, наследует свои значения из иерархии свойств типа DataGridViewCellStyle. DataGridViewCellStyleThe DataGridViewCellStyle object returned by this property inherits its values from a hierarchy of properties of type DataGridViewCellStyle. Эти свойства перечислены ниже в том порядке, в котором ячейки InheritedStyle , не являющиеся заголовками, получают свои значения.These properties are listed below in the order in which the InheritedStyle for non-header cells obtains its values.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle(только для ячеек в строках с нечетными номерами индекса)DataGridView.AlternatingRowsDefaultCellStyle (only for cells in rows with odd index numbers)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Для ячеек InheritedStyle заголовков строк и столбцов свойство заполняется значениями из следующего списка исходных свойств в заданном порядке.For row and column header cells, the InheritedStyle property is populated by values from the following list of source properties in the given order.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle или DataGridView.RowHeadersDefaultCellStyleDataGridView.ColumnHeadersDefaultCellStyle or DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

Этот процесс показан на следующей схеме.The following diagram illustrates this process.

Свойства типа датагридвиевцеллстилеProperties of type DataGridViewCellStyle

Можно также получить доступ к стилям, наследуемым конкретными строками и столбцами.You can also access the styles inherited by specific rows and columns. Свойство Column InheritedStyle наследует свои значения из следующих свойств.The column InheritedStyle property inherits its values from the following properties.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

Свойство Row InheritedStyle наследует свои значения из следующих свойств.The row InheritedStyle property inherits its values from the following properties.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle(только для ячеек в строках с нечетными номерами индекса)DataGridView.AlternatingRowsDefaultCellStyle (only for cells in rows with odd index numbers)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Для каждого свойства DataGridViewCellStyle объекта, возвращаемого InheritedStyle свойством, значение свойства получается из первого стиля ячейки в соответствующем списке, у которого соответствующее свойство имеет значение, отличное от DataGridViewCellStyle значения по умолчанию для класса.For each property in a DataGridViewCellStyle object returned by an InheritedStyle property, the property value is obtained from the first cell style in the appropriate list that has the corresponding property set to a value other than the DataGridViewCellStyle class defaults.

В следующей таблице показано, ForeColor как значение свойства для ячейки примера наследуется из содержащего его столбца.The following table illustrates how the ForeColor property value for an example cell is inherited from its containing column.

Свойство типаDataGridViewCellStyleProperty of type DataGridViewCellStyle Пример ForeColor значения для полученного объектаExample ForeColor value for retrieved object
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 значение из строки ячейки является первым вещественным значением в списке.In this case, the Color.Red value from the cell's row is the first real value on the list. Это ForeColor свойство станет значением свойства InheritedStyleячейки.This becomes the ForeColor property value of the cell's InheritedStyle.

На следующей схеме показано, как DataGridViewCellStyle различные свойства могут наследовать свои значения из разных мест.The following diagram illustrates how different DataGridViewCellStyle properties can inherit their values from different places.

Наследование-значения свойства DataGridViewDataGridView property-value inheritance

Используя преимущества наследования стилей, можно предоставить соответствующие стили для всего элемента управления без необходимости указывать одни и те же сведения в нескольких местах.By taking advantage of style inheritance, you can provide appropriate styles for the entire control without having to specify the same information in multiple places.

Хотя ячейки заголовков участвуют в наследовании стиля, как описано, ColumnHeadersDefaultCellStyle объекты RowHeadersDefaultCellStyle , возвращаемые DataGridView свойствами и элемента управления, имеют начальные значения свойств, переопределяющие значения свойств объекта, возвращаемого DefaultCellStyle свойство.Although header cells participate in style inheritance as described, the objects returned by the ColumnHeadersDefaultCellStyle and RowHeadersDefaultCellStyle properties of the DataGridView control have initial property values that override the property values of the object returned by the DefaultCellStyle property. Если требуется, чтобы свойства объекта, DefaultCellStyle возвращаемого свойством, применялись к заголовкам строк и столбцов, необходимо задать соответствующие свойства объектов, возвращаемых ColumnHeadersDefaultCellStyle свойствами и RowHeadersDefaultCellStyle , в значения по умолчанию, указанные DataGridViewCellStyle для класса.If you want the properties set for the object returned by the DefaultCellStyle property to apply to row and column headers, you must set the corresponding properties of the objects returned by the ColumnHeadersDefaultCellStyle and RowHeadersDefaultCellStyle properties to the defaults indicated for the DataGridViewCellStyle class.

Примечание

Если включены стили оформления, заголовки строк и столбцов (кроме TopLeftHeaderCell) автоматически определяются по текущей теме, переопределяя все стили, заданные этими свойствами.If visual styles are enabled, the row and column headers (except for the TopLeftHeaderCell) are automatically styled by the current theme, overriding any styles specified by these properties.

Типы, и DefaultCellStyle DataGridViewImageColumn такжеинициализируютнекоторыезначенияобъекта,возвращаемогосвойствомColumn.DataGridViewCheckBoxColumn DataGridViewButtonColumnThe DataGridViewButtonColumn, DataGridViewImageColumn, and DataGridViewCheckBoxColumn types also initialize some values of the object returned by the column DefaultCellStyle property. Дополнительные сведения см. в справочной документации по этим типам.For more information, see the reference documentation for these types.

Динамическое задание стилейSetting Styles Dynamically

Чтобы настроить стили ячеек с определенными значениями, реализуйте обработчик для DataGridView.CellFormatting события.To customize the styles of cells with particular values, implement a handler for the DataGridView.CellFormatting event. Обработчики для этого события получают аргумент DataGridViewCellFormattingEventArgs типа.Handlers for this event receive an argument of the DataGridViewCellFormattingEventArgs type. Этот объект содержит свойства, позволяющие определить значение форматируемой ячейки и ее расположение в DataGridView элементе управления.This object contains properties that let you determine the value of the cell being formatted along with its location in the DataGridView control. Этот объект также содержит CellStyle свойство, которое инициализируется значением InheritedStyle свойства форматируемой ячейки.This object also contains a CellStyle property that is initialized to the value of the InheritedStyle property of the cell being formatted. Можно изменить свойства стиля ячейки, чтобы указать сведения о стиле, соответствующие значению ячейки и расположению.You can modify the cell style properties to specify style information appropriate to the cell value and location.

Примечание

События RowPrePaint InheritedStyle и RowPostPaint также получают DataGridViewCellStyle объект в данных события, но в своем случае это копия свойства строки для целей только для чтения, а изменения в нем не влияют на элемент управления.The RowPrePaint and RowPostPaint events also receive a DataGridViewCellStyle object in the event data, but in their case, it is a copy of the row InheritedStyle property for read-only purposes, and changes to it do not affect the control.

Можно также динамически изменять стили отдельных ячеек в ответ на такие события, как DataGridView.CellMouseEnter события и. CellMouseLeaveYou can also dynamically modify the styles of individual cells in response to events such as the DataGridView.CellMouseEnter and CellMouseLeave events. Например, в обработчике CellMouseEnter события можно сохранить текущее значение цвета фона ячейки (полученное с помощью Style свойства ячейки), а затем задать новый цвет, который будет выделять ячейку при наведении на нее указателя мыши.For example, in a handler for the CellMouseEnter event, you could store the current value of the cell background color (retrieved through the cell's Style property), then set it to a new color that will highlight the cell when the mouse hovers over it. В обработчике для CellMouseLeave события можно восстановить цвет фона до исходного значения.In a handler for the CellMouseLeave event, you can then restore the background color to the original value.

Примечание

Кэширование значений, хранящихся в Style свойстве ячейки, важно, независимо от того, задано ли конкретное значение стиля.Caching the values stored in the cell's Style property is important regardless of whether a particular style value is set. Если вы временно заменили настройку стиля, ее восстановление в исходное состояние "не задано" гарантирует, что ячейка будет наследовать параметр стиля от более высокого уровня.If you temporarily replace a style setting, restoring it to its original "not set" state ensures that the cell will go back to inheriting the style setting from a higher level. Если необходимо определить фактический стиль, действующий для ячейки, независимо от того, унаследован ли этот стиль, используйте InheritedStyle свойство ячейки.If you need to determine the actual style in effect for a cell regardless of whether the style is inherited, use the cell's InheritedStyle property.

См. такжеSee also