Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

Estilos de celda en el control DataGridView de formularios Windows Forms

 

Cada celda dentro del control DataGridView puede tener su propio estilo, como formato de texto, color de fondo, color de primer plano y fuente. Pero normalmente, varias celdas comparten características de estilo determinadas.

Los grupos de celdas que comparten estilo podrían ser todas las celdas de unas filas y columnas determinadas, todas las que contengan valores específicos o todas las de un control. Puesto que estos grupos se superponen, cada celda puede obtener su información de estilo de varios sitios. Por ejemplo, puede que desee que todas las celdas de un control DataGridView utilicen la misma fuente, pero que sólo las celdas de las columnas de divisa utilicen formato de divisa y que de esas celdas sólo las que contengan números negativos utilicen un color rojo de primer plano.

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

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

Para obtener más información acerca de estas propiedades y de otras propiedades de estilo de celda, consulte la documentación de referencia de DataGridViewCellStyle y los temas enumerados en la sección Vea también que se encuentra más abajo.

Puede recuperar los objetos DataGridViewCellStyle de las distintas propiedades de DataGridView, DataGridViewColumn, DataGridViewRow y las clases DataGridViewCell y sus clases derivadas. Si todavía no se ha establecido una de estas propiedades, al recuperar su valor, se creará un nuevo objeto DataGridViewCellStyle. También puede crear instancias de sus propios objetos DataGridViewCellStyle y asignarlos a estas propiedades.

Puede evitar la duplicación innecesaria de información de estilo compartiendo los objetos DataGridViewCellStyle entre varios elementos DataGridView. Puesto que los estilos establecidos en el control, la columna y los niveles de fila se aplican en cada nivel hasta el nivel de celda, también puede evitar la duplicación del estilo estableciendo sólo estas propiedades de estilo en los niveles con estilo distinto al de los niveles anteriores. Esto se describe con más detalle en la sección Herencia de estilos que se encuentra a continuación.

La tabla siguiente muestra las propiedades principales que obtienen o establecen objetos DataGridViewCellStyle.

Propiedad.

Clases

Descripción

DefaultCellStyle

DataGridView, DataGridViewColumn, DataGridViewRow y las clases derivadas

Obtiene o establece estilos predeterminados utilizados por todas las celdas en el control completo (incluso las celdas de encabezado), en una columna o una fila.

RowsDefaultCellStyle

DataGridView

Obtiene o establece estilos de celda predeterminados utilizados por todas las filas del control. Esto no incluye las celdas de encabezado.

AlternatingRowsDefaultCellStyle

DataGridView

Obtiene o establece estilos de celda predeterminados utilizados por filas alternas del control. Utilizado para crear un efecto de doble carta.

RowHeadersDefaultCellStyle

DataGridView

Obtiene o establece estilos de celda predeterminados utilizados por los encabezados de fila de control. Reemplazado por el tema actual si se habilitan estilos visuales.

ColumnHeadersDefaultCellStyle

DataGridView

Obtiene o establece estilos de celda predeterminados utilizados por los encabezados de columna de control. Reemplazado por el tema actual si se habilitan estilos visuales.

Style

DataGridViewCell y clases derivadas

Obtiene o establece estilos especificados en el nivel celular. Estos estilos reemplazan a los heredados de los niveles más altos.

InheritedStyle

DataGridViewCell, DataGridViewRow, DataGridViewColumn y las clases derivadas

Obtiene todos los estilos actualmente aplicados a la celda, fila o columna, incluso estilos heredados de los niveles más altos.

Tal como se explica anteriormente, obteniendo el valor de una propiedad de estilo automáticamente se crean instancias de un nuevo objeto DataGridViewCellStyle si previamente no se ha establecido la propiedad. Para evitar crear estos objetos de forma innecesaria, las clases de columnas y filas tienen una propiedad HasDefaultCellStyle que puede comprobar para determinar si se ha establecido la propiedad DefaultCellStyle. De forma similar, las clases de celdas tienen una propiedad HasStyle que indica si se ha establecido la propiedad Style.

Cada una de las propiedades de estilo tiene un evento nombreDePropiedadChanged correspondiente en el control DataGridView. Para la fila, columna y propiedades de la celda, el nombre del evento comienza con "Row", "Column" o "Cell" (por ejemplo, RowDefaultCellStyleChanged). Cada uno de estos eventos se produce cuando la propiedad de estilo correspondiente se establece en un objeto DataGridViewCellStyle diferente. Estos eventos no se provocan al recuperar un objeto DataGridViewCellStyle de una propiedad de estilo y modifica sus valores de propiedad. Para responder a los cambios de los objetos de estilo de celda, controle el evento CellStyleContentChanged.

Cada DataGridViewCell obtiene su aspecto por medio de su propiedad InheritedStyle. El objeto DataGridViewCellStyle devuelto por esta propiedad hereda sus valores de una jerarquía de propiedades de tipo DataGridViewCellStyle. Estas propiedades se muestran a continuación en el orden en que InheritedStyle obtiene sus valores para las celdas que no son del encabezado.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (sólo para las celdas en filas con números de índice impares)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Para la fila y celdas del encabezado de columna, la propiedad InheritedStyle se rellena con 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 tener acceso a los estilos heredados por filas y columnas concretas. La columna la propiedad InheritedStyle hereda sus valores de las propiedades siguientes.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

La fila de la propiedad InheritedStyle hereda sus valores de las propiedades siguientes.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (sólo para las celdas en filas con números de índice impares)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

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

La tabla siguiente muestra cómo se hereda de la columna que lo contiene el valor de propiedad ForeColor para una celda del ejemplo.

Propiedad de tipo DataGridViewCellStyle

Ejemplo del valor 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 valor Color.Red de la fila de la celda es el primer valor real en la lista. Este se convierte en el valor de propiedad ForeColor de la InheritedStyle de la celda.

El diagrama siguiente muestra cómo las propiedades DataGridViewCellStyle diferentes pueden heredar sus valores de distintos lugares.

Herencia de valores de la propiedad DataGridView

Aprovechando la herencia de estilos, puede proporcionar estilos adecuados para el control entero sin necesidad de especificar la misma información en distintos lugares.

Aunque las celdas del encabezado participan en la herencia de estilos tal como se ha descrito, los objetos devueltos por las propiedades ColumnHeadersDefaultCellStyle y RowHeadersDefaultCellStyle del control DataGridView tienen valores de propiedad iniciales que reemplazan los valores de propiedad del objeto devuelto por la propiedad DefaultCellStyle. Si desea establecer las propiedades para el objeto devuelto por la propiedad DefaultCellStyle para aplicarlo a los encabezados de columna y de fila, deberá establecer las propiedades correspondientes de los objetos devueltos por las propiedades ColumnHeadersDefaultCellStyle y RowHeadersDefaultCellStyle en los valores predeterminados indicados para la clase DataGridViewCellStyle.

System_CAPS_noteNota

Si están habilitados los estilos visuales, se aplica el estilo automáticamente a los encabezados de columna y de fila del tema activo (excepto para TopLeftHeaderCell) reemplazando cualquier estilo especificado por estas propiedades.

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

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

System_CAPS_noteNota

Los eventos RowPrePaint y RowPostPaint también reciben un objeto DataGridViewCellStyle de los datos de eventos, pero en este caso, es una copia de la propiedad InheritedStyle de fila de sólo lectura y cualquier cambio que se realice en ella no afecta al control.

También puede modificar dinámicamente los estilos de celdas individuales como respuesta a los eventos como DataGridView.CellMouseEnter y CellMouseLeave. Por ejemplo, en un controlador para el evento CellMouseEnter, podría almacenar el valor actual del color de fondo de celda (recuperado mediante la propiedadStyle de la celda) y establecerlo en un nuevo color que resalte la celda cuando el mouse se mantiene sobre ella. En un controlador para el evento CellMouseLeave puede restablecer el color de fondo al valor original.

System_CAPS_noteNota

Almacenar en memoria caché los valores almacenados en la propiedad Style de la celda es importante independientemente de si se establece un valor de estilo determinado. Si reemplaza temporalmente un valor de estilo, restablecerlo a su estado original "no establecido" garantiza que la celda vuelva a heredar el valor de estilo del nivel más alto. Si necesita determinar el estilo actual activado para una celda independientemente de si se hereda el estilo, utilice la propiedad InheritedStyle de la celda.

Mostrar: