Opciones de ajuste de tamaño en el control DataGrid

Hay varias opciones disponibles para controlar el modo en que se dimensiona el control DataGrid. DataGrid, así como las filas y columnas individuales de DataGrid, se pueden establecer para que su tamaño se ajuste automáticamente a su contenido o se pueden establecer en valores específicos. De manera predeterminada, DataGrid se ampliará y se reducirá para ajustarse al tamaño de su contenido.

Dimensionamiento del control DataGrid

Precaución al usar el ajuste de tamaño automático

De manera predeterminada, las propiedades Height y Width de DataGrid se establecen en Double.NaN ("Auto" en XAML) y DataGrid se ajustará al tamaño de su contenido.

Cuando se coloca dentro de un contenedor que no restringe el tamaño de sus elementos secundarios, como Canvas o StackPanel, DataGrid se ajustará más allá de los límites visibles del contenedor y no se mostrarán barras de desplazamiento. Esta condición tiene implicaciones tanto de facilidad de uso como de rendimiento.

Cuando se enlaza a un conjunto de datos, si Height de DataGrid no está restringido, seguirá agregando una fila para cada elemento de datos del conjunto de datos enlazado. Esto puede hacer que DataGrid crezca fuera de los límites visibles de la aplicación a medida que se agregan filas. DataGrid no mostrará barras de desplazamiento en este caso porque Height seguirá creciendo para dar cabida a las nuevas filas.

Se crea un objeto para cada fila de DataGrid. Si está trabajando con un conjunto de datos de gran tamaño y permite que DataGrid ajuste su tamaño automáticamente, la creación de un gran número de objetos puede afectar al rendimiento de la aplicación.

Para evitar estos problemas al trabajar con conjuntos de datos de gran tamaño, se recomienda establecer específicamente Height de DataGrid o colocarlo en un contenedor que restrinja su Height, como Grid. Cuando Height está restringido, DataGrid solo crea las filas que caben en su Height especificado y recicla esas filas según sea necesario para mostrar nuevos datos.

Establecimiento del tamaño de DataGrid

DataGrid se puede establecer para que su tamaño se ajuste automáticamente dentro de los límites especificados o DataGrid se puede establecer en un tamaño específico. En la tabla siguiente se muestran las propiedades que se pueden establecer para controlar el tamaño de DataGrid.

Propiedad Descripción
Height Establece una altura específica para DataGrid.
MaxHeight Establece el límite superior de la altura de DataGrid. DataGrid crecerá verticalmente hasta que alcance esta altura.
MinHeight Establece el límite inferior de la altura de DataGrid. DataGrid se reducirá verticalmente hasta que alcance esta altura.
Width Establece un ancho específico para DataGrid.
MaxWidth Establece el límite superior del ancho de DataGrid. DataGrid crecerá horizontalmente hasta que alcance este ancho.
MinWidth Establece el límite inferior del ancho de DataGrid. DataGrid se reducirá horizontalmente hasta que alcance este ancho.

Dimensionamiento de las filas y los encabezados de fila

Filas de DataGrid

De manera predeterminada, la propiedad Height de una fila DataGrid se establece en Double.NaN ("Auto" en XAML), y el alto de fila se expandirá al tamaño de su contenido. El alto de todas las filas de DataGrid se puede especificar estableciendo la propiedad DataGrid.RowHeight. Los usuarios pueden cambiar el alto de fila arrastrando los divisores de encabezado de fila.

Encabezados de fila de DataGrid

Para mostrar los encabezados de fila, la propiedad HeadersVisibility debe establecerse en DataGridHeadersVisibility.Row o DataGridHeadersVisibility.All. De manera predeterminada, los encabezados de fila se muestran y su tamaño se ajusta automáticamente al tamaño de su contenido. Los encabezados de fila pueden tener un ancho específico estableciendo la propiedad DataGrid.RowHeaderWidth.

Dimensionamiento de las columnas y los encabezados de columna

Columnas de DataGrid

DataGrid usa los valores de DataGridLength y la estructura DataGridLengthUnitType para especificar modos de ajuste de tamaño absolutos o automáticos.

En la tabla siguiente se muestran los valores que proporciona la estructura DataGridLengthUnitType.

Nombre Descripción
Auto El modo de ajuste de tamaño automático predeterminado dimensiona las columnas DataGrid en función del contenido de las celdas y de los encabezados de columna.
SizeToCells El modo de ajuste de tamaño automático basado en celdas dimensiona las columnas DataGrid en función del contenido de las celdas de la columna, sin incluir los encabezados de columna.
SizeToHeader El modo de ajuste de tamaño automático basado en encabezados dimensiona las columnas DataGrid en función solo del contenido de los encabezados de columna.
Pixel El modo de ajuste de tamaño basado en píxeles dimensiona las columnas DataGrid en función del valor numérico proporcionado.
Star El modo de variación de tamaño proporcional se usa para distribuir el espacio disponible en proporciones ponderadas.

En XAML, los valores proporcionales se expresan como n*, donde n representa un valor numérico. 1* equivale a *. Por ejemplo, si dos columnas de un DataGrid tienen anchos de * y 2*, la primera columna recibirá una parte del espacio disponible y la segunda columna recibirá dos partes del espacio disponible.

La clase DataGridLengthConverter se puede usar para convertir datos entre valores numéricos o de cadena y valores DataGridLength.

De manera predeterminada, la propiedad DataGrid.ColumnWidth se establece en SizeToHeader y la propiedad DataGridColumn.Width se establece en Auto. Cuando el modo de ajuste de tamaño se establece en Auto o SizeToCells, las columnas crecen según el ancho de su contenido visible más amplio. Al desplazarse, estos modos de ajuste de tamaño harán que las columnas se expandan si el contenido que es mayor que el tamaño de columna actual se desplaza y se hace visible. La columna no se reducirá después de que el contenido salga de la vista.

Las columnas de DataGrid también se pueden establecer para que su tamaño se ajuste automáticamente solo dentro de unos límites especificados, o bien se pueden establecer en un tamaño específico. En la tabla siguiente se muestran las propiedades que se pueden establecer para controlar el tamaño de las columnas.

Propiedad Descripción
DataGrid.MaxColumnWidth Establece el límite superior de todas las columnas de DataGrid.
DataGridColumn.MaxWidth Establece el límite superior de una columna individual. Invalida DataGrid.MaxColumnWidth.
DataGrid.MinColumnWidth Establece el límite inferior de todas las columnas de DataGrid.
DataGridColumn.MinWidth Establece el límite inferior de una columna individual. Invalida DataGrid.MinColumnWidth.
DataGrid.ColumnWidth Establece un ancho específico para todas las columnas de DataGrid.
DataGridColumn.Width Establece un ancho específico para una columna individual. Invalida DataGrid.ColumnWidth.

Encabezados de columna de DataGrid

De manera predeterminada, se muestran los encabezados de columna DataGrid. Para ocultar los encabezados de columna, la propiedad HeadersVisibility debe establecerse en DataGridHeadersVisibility.Row o DataGridHeadersVisibility.None. De manera predeterminada, los encabezados de columna se muestran y su tamaño se ajusta automáticamente al tamaño de su contenido. Se puede asignar un alto específico a los encabezados de columna estableciendo la propiedad DataGrid.ColumnHeaderHeight.

Cambio de tamaño con el mouse

Los usuarios pueden cambiar el tamaño de las filas y columnas de DataGrid arrastrando los divisores de los encabezados de fila o columna. DataGrid también admite el cambio de tamaño automático de las filas y columnas haciendo doble clic en el divisor de encabezado de fila o columna. Para evitar que un usuario cambie el tamaño de columnas concretas, establezca la propiedad DataGridColumn.CanUserResize en false para las columnas individuales. Para evitar que los usuarios cambien el tamaño de todas las columnas, establezca la propiedad DataGrid.CanUserResizeColumns en false. Para evitar que los usuarios cambien el tamaño de todas las filas, establezca la propiedad DataGrid.CanUserResizeRows en false.

Vea también