Estilos de celda en el control DataGridView de formularios Windows FormsCell Styles in the Windows Forms DataGridView Control

Cada celda del DataGridView control puede tener su propio estilo, como el formato de texto, el color de fondo, el color de primer plano y la fuente.Each cell within the DataGridView control can have its own style, such as text format, background color, foreground color, and font. No obstante, por lo general, varias celdas compartirán determinadas características de estilo.Typically, however, multiple cells will share particular style characteristics.

Los grupos de celdas que comparten estilos pueden incluir todas las celdas de filas o columnas concretas, todas las celdas que contienen valores concretos o todas las celdas del control.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. Dado que estos grupos se superponen, cada celda puede obtener su información de estilo desde más de un lugar.Because these groups overlap, each cell may get its styling information from more than one place. Por ejemplo, puede que desee que todas las celdas DataGridView de un control usen la misma fuente, pero solo las celdas de las columnas de moneda usen el formato de moneda y solo las celdas de moneda con números negativos para usar un color de primer plano rojo.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.

La clase DataGridViewCellStyleThe DataGridViewCellStyle Class

La DataGridViewCellStyle clase contiene las siguientes propiedades relacionadas con el estilo visual:The DataGridViewCellStyle class contains the following properties related to visual style:

Esta clase también contiene las siguientes propiedades relacionadas con el formato:This class also contains the following properties related to formatting:

Para obtener más información sobre estas propiedades y otras propiedades de estilo de celda, DataGridViewCellStyle vea la documentación de referencia y los temas enumerados en la sección Vea también más adelante.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.

Usar objetos DataGridViewCellStyleUsing DataGridViewCellStyle Objects

Puede DataGridViewCellStyle recuperar objetos de varias propiedades de las DataGridViewclases, DataGridViewColumn, DataGridViewRowy DataGridViewCell y sus clases derivadas.You can retrieve DataGridViewCellStyle objects from various properties of the DataGridView, DataGridViewColumn, DataGridViewRow, and DataGridViewCell classes and their derived classes. Si todavía no se ha establecido una de estas propiedades, al recuperar su valor se creará un DataGridViewCellStyle nuevo objeto.If one of these properties has not yet been set, retrieving its value will create a new DataGridViewCellStyle object. También puede crear instancias de sus propios DataGridViewCellStyle objetos y asignarlos a estas propiedades.You can also instantiate your own DataGridViewCellStyle objects and assign them to these properties.

Puede evitar la duplicación innecesaria de información de DataGridViewCellStyle estilo compartiendo objetos DataGridView entre varios elementos.You can avoid unnecessary duplication of style information by sharing DataGridViewCellStyle objects among multiple DataGridView elements. Dado que los estilos establecidos en los niveles de control, columna y fila se filtran por cada nivel hasta el nivel de celda, también puede evitar la duplicación de estilo estableciendo únicamente las propiedades de estilo en cada nivel que difieren de los niveles anteriores.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. Esto se describe con más detalle en la sección herencia de estilo que se muestra a continuación.This is described in more detail in the Style Inheritance section that follows.

En la tabla siguiente se enumeran las propiedades principales que DataGridViewCellStyle obtienen o establecen objetos.The following table lists the primary properties that get or set DataGridViewCellStyle objects.

PropiedadProperty ClasesClasses DESCRIPCIÓNDescription
DefaultCellStyle DataGridView, DataGridViewColumn,yclasesderivadas DataGridViewRowDataGridView, DataGridViewColumn, DataGridViewRow, and derived classes Obtiene o establece los estilos predeterminados utilizados por todas las celdas de todo el control (incluidas las celdas de encabezado), en una columna o en una fila.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 Obtiene o establece los estilos de celda predeterminados utilizados por todas las filas del control.Gets or sets default cell styles used by all rows in the control. Esto no incluye las celdas de encabezado.This does not include header cells.
AlternatingRowsDefaultCellStyle DataGridView Obtiene o establece los estilos de celda predeterminados usados por filas alternas en el control.Gets or sets default cell styles used by alternating rows in the control. Se usa para crear un efecto como libro de contabilidad.Used to create a ledger-like effect.
RowHeadersDefaultCellStyle DataGridView Obtiene o establece los estilos de celda predeterminados usados por los encabezados de fila del control.Gets or sets default cell styles used by the control's row headers. Reemplazado por el tema actual si los estilos visuales están habilitados.Overridden by the current theme if visual styles are enabled.
ColumnHeadersDefaultCellStyle DataGridView Obtiene o establece los estilos de celda predeterminados usados por los encabezados de columna del control.Gets or sets default cell styles used by the control's column headers. Reemplazado por el tema actual si los estilos visuales están habilitados.Overridden by the current theme if visual styles are enabled.
Style DataGridViewCelly clases derivadasDataGridViewCell and derived classes Obtiene o establece los estilos especificados en el nivel de celda.Gets or sets styles specified at the cell level. Estos estilos invalidan los heredados de los niveles superiores.These styles override those inherited from higher levels.
InheritedStyle DataGridViewCell, DataGridViewRow,yclasesderivadas DataGridViewColumnDataGridViewCell, DataGridViewRow, DataGridViewColumn, and derived classes Obtiene todos los estilos aplicados actualmente a la celda, fila o columna, incluidos los estilos heredados de niveles superiores.Gets all the styles currently applied to the cell, row, or column, including styles inherited from higher levels.

Como se mencionó anteriormente, al obtener el valor de una propiedad de estilo se crea DataGridViewCellStyle automáticamente una instancia de un nuevo objeto si la propiedad no se ha establecido previamente.As mentioned above, getting the value of a style property automatically instantiates a new DataGridViewCellStyle object if the property has not been previously set. Para evitar la creación de estos objetos innecesariamente, las clases de fila HasDefaultCellStyle y de columna tienen una propiedad que se puede DefaultCellStyle comprobar para determinar si se ha establecido la propiedad.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. Del mismo modo, las clases de HasStyle celda tienen una propiedad que Style indica si se ha establecido la propiedad.Similarly, the cell classes have a HasStyle property that indicates whether the Style property has been set.

Cada una de las propiedades de estilo tiene un evento PropertyName Changed correspondiente DataGridView en el control.Each of the style properties has a corresponding PropertyNameChanged event on the DataGridView control. En el caso de las propiedades de fila, columna y celda, el nombre del eventoRowcomienza por "Column", ""Cello "" (por RowDefaultCellStyleChangedejemplo,).For row, column, and cell properties, the name of the event begins with "Row", "Column", or "Cell" (for example, RowDefaultCellStyleChanged). Cada uno de estos eventos se produce cuando la propiedad de estilo correspondiente se establece DataGridViewCellStyle en un objeto diferente.Each of these events occurs when the corresponding style property is set to a different DataGridViewCellStyle object. Estos eventos no se producen cuando se recupera un DataGridViewCellStyle objeto de una propiedad de estilo y se modifican sus valores de propiedad.These events do not occur when you retrieve a DataGridViewCellStyle object from a style property and modify its property values. Para responder a los cambios en los propios objetos de estilo de celda CellStyleContentChanged , controle el evento.To respond to changes to the cell style objects themselves, handle the CellStyleContentChanged event.

Herencia de estiloStyle Inheritance

Cada DataGridViewCell obtiene su apariencia de su InheritedStyle propiedad.Each DataGridViewCell gets its appearance from its InheritedStyle property. El DataGridViewCellStyle objeto devuelto por esta propiedad hereda sus valores de una jerarquía de propiedades de tipo DataGridViewCellStyle.The DataGridViewCellStyle object returned by this property inherits its values from a hierarchy of properties of type DataGridViewCellStyle. Estas propiedades se enumeran a continuación en el orden en InheritedStyle que el para las celdas que no son de encabezado obtiene sus valores.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(solo para las celdas de filas con números de índice impares)DataGridView.AlternatingRowsDefaultCellStyle (only for cells in rows with odd index numbers)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

En el caso de las celdas de encabezado InheritedStyle de fila y de columna, la propiedad se rellena con los valores de la siguiente lista de propiedades de origen en el orden especificado.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 o DataGridView.RowHeadersDefaultCellStyleDataGridView.ColumnHeadersDefaultCellStyle or DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

En el siguiente diagrama se ilustra este proceso.The following diagram illustrates this process.

Propiedades de tipo DataGridViewCellStyleProperties of type DataGridViewCellStyle

También puede tener acceso a los estilos heredados por filas y columnas específicas.You can also access the styles inherited by specific rows and columns. La propiedad InheritedStyle de columna hereda sus valores de las siguientes propiedades.The column InheritedStyle property inherits its values from the following properties.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

La propiedad InheritedStyle Row hereda sus valores de las propiedades siguientes.The row InheritedStyle property inherits its values from the following properties.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle(solo para las celdas de filas con números de índice impares)DataGridView.AlternatingRowsDefaultCellStyle (only for cells in rows with odd index numbers)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Para cada propiedad de un DataGridViewCellStyle objeto devuelto por InheritedStyle una propiedad, el valor de la propiedad se obtiene del primer estilo de celda de la lista correspondiente que tiene la propiedad correspondiente establecida en un valor DataGridViewCellStyle distinto de los valores predeterminados de la clase.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.

En la tabla siguiente se muestra cómo ForeColor se hereda el valor de propiedad de una celda de ejemplo de la columna que lo contiene.The following table illustrates how the ForeColor property value for an example cell is inherited from its containing column.

Propiedad de tipoDataGridViewCellStyleProperty of type DataGridViewCellStyle Valor ForeColor de ejemplo para el objeto recuperadoExample 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

En este caso, el Color.Red valor de la fila de la celda es el primer valor real de la lista.In this case, the Color.Red value from the cell's row is the first real value on the list. Esto se convierte ForeColor en el valor de propiedad de InheritedStylela propiedad de la celda.This becomes the ForeColor property value of the cell's InheritedStyle.

En el diagrama siguiente se muestra cómo DataGridViewCellStyle diferentes propiedades pueden heredar sus valores de diferentes lugares.The following diagram illustrates how different DataGridViewCellStyle properties can inherit their values from different places.

Herencia de-valores de propiedad de DataGridViewDataGridView property-value inheritance

Al aprovechar la herencia de estilo, puede proporcionar los estilos adecuados para todo el control sin tener que especificar la misma información en varios lugares.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.

Aunque las celdas de encabezado participan en la herencia de estilo como se describe, ColumnHeadersDefaultCellStyle los RowHeadersDefaultCellStyle objetos devueltos por las propiedades y del DataGridView control tienen valores de propiedad iniciales que invalidan los valores de propiedad del objeto devuelto por DefaultCellStyle propiedad.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. Si desea que las propiedades establecidas para el objeto devuelto por DefaultCellStyle la propiedad se apliquen a los encabezados de fila y de columna, debe establecer las propiedades correspondientes de los objetos ColumnHeadersDefaultCellStyle devueltos por las propiedades y RowHeadersDefaultCellStyle en los valores predeterminados indicados. para la DataGridViewCellStyle clase.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.

Nota

Si los estilos visuales están habilitados, los encabezados de fila y de columna ( TopLeftHeaderCellexcepto para) se aplican automáticamente de estilo al tema actual, invalidando los estilos especificados por estas propiedades.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.

Los DataGridViewButtonColumntipos DataGridViewImageColumn, DefaultCellStyle y DataGridViewCheckBoxColumn también inicializan algunos valores del objeto devuelto por la propiedad de columna.The DataGridViewButtonColumn, DataGridViewImageColumn, and DataGridViewCheckBoxColumn types also initialize some values of the object returned by the column DefaultCellStyle property. Para obtener más información, consulte la documentación de referencia de estos tipos.For more information, see the reference documentation for these types.

Establecer estilos dinámicamenteSetting Styles Dynamically

Para personalizar los estilos de las celdas con valores concretos, implemente un controlador DataGridView.CellFormatting para el evento.To customize the styles of cells with particular values, implement a handler for the DataGridView.CellFormatting event. Los DataGridViewCellFormattingEventArgs controladores de este evento reciben un argumento del tipo.Handlers for this event receive an argument of the DataGridViewCellFormattingEventArgs type. Este objeto contiene propiedades que permiten determinar el valor de la celda que se está formateando junto con su ubicación DataGridView en el control.This object contains properties that let you determine the value of the cell being formatted along with its location in the DataGridView control. Este objeto también contiene una CellStyle propiedad que se inicializa en el valor de la InheritedStyle propiedad de la celda a la que se va a dar formato.This object also contains a CellStyle property that is initialized to the value of the InheritedStyle property of the cell being formatted. Puede modificar las propiedades de estilo de celda para especificar la información de estilo adecuada para el valor de celda y la ubicación.You can modify the cell style properties to specify style information appropriate to the cell value and location.

Nota

Los RowPrePaint eventos RowPostPaint y también reciben un DataGridViewCellStyle objeto en los datos de evento, pero en su caso, es una copia de la propiedad InheritedStyle Row para fines de solo lectura y los cambios en ella no afectan al control.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.

También puede modificar dinámicamente los estilos de celdas individuales en respuesta a eventos como los DataGridView.CellMouseEnter eventos y. CellMouseLeaveYou can also dynamically modify the styles of individual cells in response to events such as the DataGridView.CellMouseEnter and CellMouseLeave events. Por ejemplo, en un controlador para el CellMouseEnter evento, puede almacenar el valor actual del color de fondo de la celda (recuperado a través Style de la propiedad de la celda) y, a continuación, establecerlo en un nuevo color que resaltará la celda cuando se mantenga el mouse sobre ella.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. En un controlador para el CellMouseLeave evento, puede restaurar el color de fondo al valor original.In a handler for the CellMouseLeave event, you can then restore the background color to the original value.

Nota

Almacenar en caché los valores almacenados en la Style propiedad de la celda es importante independientemente de si se ha establecido un valor de estilo determinado.Caching the values stored in the cell's Style property is important regardless of whether a particular style value is set. Si reemplaza temporalmente una configuración de estilo, restaurarla a su estado original "sin establecer" garantiza que la celda volverá a heredar la configuración de estilo de un nivel superior.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. Si necesita determinar el estilo real en vigor para una celda, independientemente de si el estilo es heredado, utilice la propiedad de InheritedStyle la celda.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.

Vea tambiénSee also