Compartir por


Estilos de celda en el control DataGridView de los formularios de Windows Forms

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. Sin embargo, normalmente, varias celdas compartirán características de estilo particulares.

Los grupos de celdas que comparten estilos pueden incluir todas las celdas dentro de filas o columnas concretas, todas las celdas que contienen valores concretos o todas las celdas del control. Dado que estos grupos se superponen, cada celda puede obtener su información de estilo de más de un lugar. Por ejemplo, puede querer que todas las celdas de un DataGridView control usen la misma fuente, pero solo las celdas de las columnas de tipo moneda usen el formato de moneda y solo las celdas con formato de moneda con números negativos usen un color de primer plano rojo.

Clase DataGridViewCellStyle

La DataGridViewCellStyle clase contiene las siguientes propiedades relacionadas con el estilo visual:

Esta clase también contiene las siguientes propiedades relacionadas con el formato:

Para obtener más información sobre estas propiedades y otras propiedades de estilo de celda, consulte la documentación de referencia DataGridViewCellStyle y los artículos enumerados en la sección Ver también que aparece a continuación.

Uso de objetos DataGridViewCellStyle

Puede recuperar DataGridViewCellStyle objetos de varias propiedades de las clases DataGridView, DataGridViewColumn, DataGridViewRow y DataGridViewCell y sus clases derivadas. Si aún no se ha establecido una de estas propiedades, la recuperación de su valor creará un nuevo DataGridViewCellStyle objeto. También puede crear instancias de sus propios DataGridViewCellStyle objetos y asignarlos a estas propiedades.

Puede evitar la duplicación innecesaria de la información de estilo compartiendo DataGridViewCellStyle objetos entre varios DataGridView elementos. Dado que los estilos establecidos en los niveles de control, columna y fila filtran por cada nivel al nivel de celda, también puede evitar la duplicación de estilos estableciendo solo esas propiedades de estilo en cada nivel que difieren de los niveles anteriores. Esto se describe con más detalle en la sección Herencia de estilo siguiente.

En la tabla siguiente se enumeran las propiedades principales que obtienen o establecen DataGridViewCellStyle objetos.

Propiedad Las clases Descripción
DefaultCellStyle DataGridView, DataGridViewColumn, DataGridViewRow y clases derivadas Obtiene o establece los estilos predeterminados usados por todas las celdas del control completo (incluidas las celdas de encabezado), en una columna o en una fila.
RowsDefaultCellStyle DataGridView Obtiene o establece los estilos de celda predeterminados utilizados por todas las filas del control. Esto no incluye celdas de encabezado.
AlternatingRowsDefaultCellStyle DataGridView Obtiene o establece los estilos de celda predeterminados que se usan alternando filas en el control. Se usa para crear un efecto similar al libro de contabilidad.
RowHeadersDefaultCellStyle DataGridView Obtiene o establece los estilos de celda predeterminados usados por los encabezados de fila del control. Anulado por el tema actual si los estilos visuales están habilitados.
ColumnHeadersDefaultCellStyle DataGridView Obtiene o establece los estilos de celda predeterminados utilizados por los encabezados de columna del control. Anulado por el tema actual si los estilos visuales están habilitados.
Style DataGridViewCell y clases derivadas Obtiene o establece estilos especificados en el nivel de celda. Estos estilos anulan aquellos heredados de niveles superiores.
InheritedStyle DataGridViewCell, DataGridViewRow, DataGridViewColumn y clases derivadas Obtiene todos los estilos aplicados actualmente a la celda, fila o columna, incluidos los estilos heredados de niveles superiores.

Como se mencionó anteriormente, al obtener el valor de una propiedad style, se crea una instancia automática de un nuevo DataGridViewCellStyle objeto si la propiedad no se ha establecido previamente. Para evitar crear estos objetos innecesariamente, las clases de fila y columna tienen una HasDefaultCellStyle propiedad que se puede comprobar para determinar si se ha establecido la DefaultCellStyle propiedad. Del mismo modo, las clases de celda tienen una HasStyle propiedad que indica si se ha establecido la Style propiedad .

Cada una de las propiedades de estilo tiene un evento PropertyNameChanged correspondiente en el DataGridView control . Para las propiedades row, column y cell, el nombre del evento comienza por "", "RowColumn" o "Cell" (por ejemplo, RowDefaultCellStyleChanged). Cada uno de estos eventos se produce cuando la propiedad de estilo correspondiente se establece en un objeto diferente DataGridViewCellStyle . Estos eventos no se producen cuando se recupera un DataGridViewCellStyle objeto de una propiedad de estilo y se modifican sus valores de propiedad. Para responder a los cambios en los objetos de estilo de celda en sí mismos, controle el evento CellStyleContentChanged.

Herencia de estilos

Cada DataGridViewCell obtiene su apariencia de su InheritedStyle propiedad. El DataGridViewCellStyle objeto devuelto por esta propiedad hereda sus valores de una jerarquía de propiedades de tipo DataGridViewCellStyle. Estas propiedades se enumeran a continuación en el orden en que las celdas no encabezadas InheritedStyle obtienen sus valores.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (solo para las celdas de las filas con números de índice impar)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Para las celdas de encabezado de fila y columna, la InheritedStyle propiedad se rellena mediante valores de la siguiente lista de propiedades de origen en el orden especificado.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle o DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

En el diagrama siguiente se muestra este proceso.

Propiedades del tipo DataGridViewCellStyle

También puede acceder a los estilos heredados por filas y columnas específicas. La propiedad column InheritedStyle hereda sus valores de las siguientes propiedades.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

La propiedad row InheritedStyle hereda sus valores de las siguientes propiedades.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (solo para las celdas de las filas con números de índice impar)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Para cada propiedad de un objeto DataGridViewCellStyle devuelto por una propiedad InheritedStyle, el valor de la propiedad se obtiene del primer estilo de celda en la lista adecuada que tiene la propiedad correspondiente establecida en un valor distinto de los valores predeterminados de la clase DataGridViewCellStyle.

En la siguiente tabla se muestra cómo la propiedad de valor ForeColor de una celda de ejemplo se hereda de su columna contenedora.

Propiedad de tipo DataGridViewCellStyle Valor de ejemplo ForeColor para el objeto recuperado
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. Esto se convierte en el ForeColor valor de propiedad de InheritedStylela celda.

En el diagrama siguiente se muestra cómo DataGridViewCellStyle diferentes propiedades pueden heredar sus valores de diferentes lugares.

Herencia de valores de propiedad de DataGridView

Al aprovechar la herencia de estilos, puede proporcionar estilos adecuados para todo el control sin tener que especificar la misma información en varios lugares.

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

Nota:

Si los estilos visuales están habilitados, los encabezados de fila y columna, excepto TopLeftHeaderCell, son automáticamente estilizados por el tema actual, reemplazando cualquier estilo especificado por estas propiedades.

También los tipos DataGridViewButtonColumn, DataGridViewImageColumn y DataGridViewCheckBoxColumn inicializan algunos valores del objeto devuelto por la propiedad de columna DefaultCellStyle. Para obtener más información, consulte la documentación de referencia de estos tipos.

Establecer estilos dinámicamente

Para personalizar los estilos de las celdas con valores concretos, implemente un controlador para el DataGridView.CellFormatting evento. Los controladores de este evento reciben un argumento del tipo DataGridViewCellFormattingEventArgs. Este objeto contiene propiedades que permiten determinar el valor de la celda que se está formateando junto con su ubicación en el control DataGridView. Este objeto también contiene una CellStyle propiedad que se inicializa con el valor de la InheritedStyle propiedad de la celda a la que se da formato. Puede modificar las propiedades de estilo de celda para especificar la información de estilo adecuada para el valor y la ubicación de la celda.

Nota:

Los eventos RowPrePaint y RowPostPaint también reciben un objeto DataGridViewCellStyle en los datos del evento, pero en su caso, es una copia de la propiedad row InheritedStyle con fines de solo lectura, y los cambios en ella no afectan al control.

También puede modificar dinámicamente los estilos de celdas individuales en respuesta a eventos como los DataGridView.CellMouseEnter y los CellMouseLeave. Por ejemplo, en un controlador para el CellMouseEnter evento, podría almacenar el valor actual del color de fondo de la celda (recuperado a través de la propiedad de Style la celda) y, a continuación, establecerlo en un nuevo color que resaltará la celda cuando el mouse mantenga el puntero sobre él. En un controlador del evento CellMouseLeave, puede restaurar el color de fondo a su valor original.

Nota:

El almacenamiento en caché de los valores almacenados en la propiedad de Style la celda es importante independientemente de si se establece un valor de estilo determinado. Si reemplaza temporalmente una configuración de estilo, restaurarla en su estado original "no establecido" garantiza que la celda vuelva a heredar la configuración de estilo de un nivel superior. Si necesita determinar el estilo real aplicado a una celda, independientemente de si el estilo se hereda, use la propiedad InheritedStyle de la celda.

Consulte también