Opciones de ajuste de tamaño en el control DataGridView de formularios Windows Forms

Las filas, columnas y encabezados de DataGridView cambian de tamaño debido a diferentes motivos. En la tabla siguiente se incluyen estos motivos.

Repetición Descripción
Cambio de tamaño del usuario Los usuarios pueden realizar ajustes de tamaño arrastrando o haciendo doble clic en los divisores de fila, columna o encabezado.
Cambio de tamaño del control En el modo de relleno de columnas, los anchos de columna cambian cuando cambia el ancho del control; por ejemplo, cuando el control está acoplado a su formulario primario y el usuario cambia el tamaño del formulario.
Cambio de valor de celda En los modos de ajuste de tamaño automático basados en contenido, los tamaños cambian para ajustarse a los nuevos valores de presentación.
Llamada al método El cambio de tamaño basado en contenido mediante programación permite realizar ajustes de tamaño oportunistas en función de los valores de celda en el momento de la llamada al método.
Valor de propiedad También puede establecer valores de alto y ancho específicos.

De forma predeterminada, el cambio de tamaño del usuario está habilitado, el ajuste de tamaño automático está deshabilitado y los valores de celda que son más anchos que sus columnas se recortan.

En la tabla siguiente se muestran escenarios que puede usar para ajustar el comportamiento predeterminado o para usar opciones de ajuste de tamaño específicas para lograr efectos concretos.

Escenario Implementación
Usar el modo de relleno de columnas para mostrar datos de tamaño similar en un número relativamente pequeño de columnas que ocupan todo el ancho del control sin mostrar la barra de desplazamiento horizontal. Establezca la propiedad AutoSizeColumnsMode en Fill.
Usar el modo de relleno de columnas con valores de visualización de tamaños variables. Establezca la propiedad AutoSizeColumnsMode en Fill. Inicialice los anchos de columna relativos estableciendo las propiedades de columna FillWeight o llamando al método de control AutoResizeColumns después de rellenar el control con datos.
Usar el modo de relleno de columnas con valores de importancia variable. Establezca la propiedad AutoSizeColumnsMode en Fill. Establezca valores grandes MinimumWidth para las columnas que siempre deben mostrar algunos de sus datos o use una opción de ajuste de tamaño que no sea el modo de relleno para columnas específicas.
Usar el modo de relleno de columnas para evitar mostrar el fondo del control. Establezca la propiedad AutoSizeMode de la última columna en Fill y use otras opciones de ajuste de tamaño para las otras columnas. Si las demás columnas usan demasiado espacio disponible, establezca la propiedad MinimumWidth de la última columna.
Mostrar una columna de ancho fijo, como un icono o una columna de ID. Establezca AutoSizeMode en None y Resizable en False para la columna. Inicialice su ancho estableciendo la propiedad Width o llamando al método de control AutoResizeColumn después de rellenar el control con datos.
Ajustar los tamaños automáticamente cada vez que cambie el contenido de las celdas para evitar el recorte y optimizar el uso del espacio. Establezca una propiedad de ajuste de tamaño automático en un valor que represente un modo de ajuste de tamaño basado en contenido. Para evitar una penalización de rendimiento al trabajar con grandes cantidades de datos, use un modo de ajuste de tamaño que calcule solo las filas mostradas.
Ajustar los tamaños para que se adapten a los valores de las filas mostradas y evitar penalizaciones de rendimiento al trabajar con muchas filas. Use los valores de enumeración de modo de ajuste de tamaño adecuados con cambio de tamaño automático o mediante programación. Para ajustar los tamaños para que se ajusten a los valores de las filas recién mostradas durante el desplazamiento, llame a un método de cambio de tamaño en un controlador de eventos Scroll. Para personalizar el cambio de tamaño del usuario con doble clic para que solo los valores de las filas mostradas determinen los nuevos tamaños, llame a un método de cambio de tamaño en un controlador de eventos RowDividerDoubleClick o ColumnDividerDoubleClick.
Ajustar los tamaños para adaptar el contenido de las celdas solo en momentos específicos para evitar penalizaciones de rendimiento o permitir el cambio de tamaño del usuario. Llame a un método de cambio de tamaño basado en contenido en un controlador de eventos. Por ejemplo, use el evento DataBindingComplete para inicializar tamaños después del enlace y controlar el evento CellValidated o CellValueChanged para ajustar los tamaños y compensar las modificaciones del usuario o los cambios en un origen de datos enlazado.
Ajustar la altura de las filas para el contenido de celdas multilínea. Asegúrese de que los anchos de columna son adecuados para mostrar párrafos de texto y use el ajuste de tamaño automático o la programación de filas basadas en contenido para ajustar la altura. Asegúrese también de que las celdas con contenido multilínea se muestren mediante un valor de estilo de celda WrapMode de True.

Normalmente, usará un modo de ajuste de tamaño automático de columnas para mantener los anchos de columna o establecerlos en anchos específicos antes de que se ajuste la altura de las filas.

Cambio de tamaño con el mouse

De forma predeterminada, los usuarios pueden cambiar el tamaño de las filas, columnas y encabezados que no usan un modo de ajuste de tamaño automático basado en los valores de celda. Para evitar que los usuarios cambien el tamaño con otros modos, como el modo de relleno de columnas, establezca una o varias de las propiedades DataGridView siguientes:

También puede impedir que los usuarios cambien el tamaño de las filas o columnas individuales estableciendo sus propiedades Resizable. De forma predeterminada, el valor de la propiedad Resizable se basa en el valor de propiedad AllowUserToResizeColumns de las columnas y el valor de propiedad AllowUserToResizeRows de las filas. Sin embargo, si establece explícitamente Resizable en True o False, el valor especificado invalida el valor de control para esa fila o columna. Establezca Resizable en NotSet para restaurar la herencia.

Dado que NotSet restaura la herencia de valores, la propiedad Resizable nunca devolverá un valor NotSet a menos que la fila o columna no se haya agregado a un control DataGridView. Si necesita determinar si se hereda el valor de propiedad Resizable de una fila o columna, examine su propiedad State. Si el valor State incluye la marca ResizableSet, el valor de la propiedad Resizable no se hereda.

Cambio automático de tamaño

Hay dos tipos de tamaño automático en el control DataGridView: el modo de relleno de columnas y el ajuste de tamaño automático basado en contenido.

El modo de relleno de columnas hace que las columnas visibles del control rellenen el ancho del área de visualización del control. Para obtener más información sobre este modo, consulte Modo de relleno de columnas en el control DataGridView de formularios Windows Forms.

También puede configurar filas, columnas y encabezados para ajustar automáticamente sus tamaños y adaptarlos a su contenido de celda. En este caso, el ajuste de tamaño se produce cada vez que cambia el contenido de la celda.

Nota:

Si mantiene valores de celda en una caché de datos personalizada mediante el modo virtual, el ajuste de tamaño automático se produce cuando el usuario edita un valor de celda, pero no se produce al modificar un valor almacenado en caché fuera de un controlador de eventos CellValuePushed. En este caso, llame al método UpdateCellValue para forzar al control a actualizar la visualización de celda y aplicar los modos de ajuste de tamaño automático actuales.

Si el ajuste de tamaño automático basado en contenido está habilitado solo para una dimensión(es decir, para filas, pero no columnas, o para columnas, pero no filas) y WrapMode también se habilita, el ajuste de tamaño también se produce siempre que cambia la otra dimensión. Por ejemplo, si las filas están configuradas para el ajuste de tamaño automático y las columnas no, y WrapMode está habilitado, los usuarios pueden arrastrar divisores de columna para cambiar el ancho de una columna y los altos de fila se ajustarán automáticamente para que el contenido de las celdas siga mostrándose completamente.

Si configura las filas y columnas con el ajuste automático de tamaño basado en contenido y WrapMode está habilitado, el control DataGridView ajustará los tamaños siempre que el contenido de la celda cambie y usará una proporción ideal de alto a ancho de celda al calcular nuevos tamaños.

Para configurar el modo de ajuste de tamaño para encabezados y filas y para columnas que no reemplazan el valor de control, establezca una o varias de las propiedades DataGridView siguientes:

Para invalidar el modo de ajuste de tamaño de columna del control para una columna individual, establezca su propiedad AutoSizeMode en un valor distinto de NotSet. El modo de ajuste de tamaño de una columna está determinado realmente por su propiedad InheritedAutoSizeMode. El valor de esta propiedad se basa en el valor de propiedad AutoSizeMode de la columna, a menos que ese valor sea NotSet, en cuyo caso se hereda el valor del control AutoSizeColumnsMode.

Use el cambio de tamaño automático basado en contenido con precaución al trabajar con grandes cantidades de datos. Para evitar penalizaciones de rendimiento, use los modos de ajuste de tamaño automático que calculan los tamaños en función de las filas mostradas en lugar de analizar todas las filas del control. Para obtener el máximo rendimiento, use el cambio de tamaño mediante programación para que pueda cambiar el tamaño en momentos específicos, como inmediatamente después de cargar los nuevos datos.

Los modos de ajuste de tamaño automático basados en contenido no afectan a las filas, columnas o encabezados ocultos establecidos mediante la propiedad de fila o columna Visible o el RowHeadersVisible del control o las propiedades ColumnHeadersVisible en false. Por ejemplo, si una columna está oculta después de que se ajuste automáticamente a un valor de celda grande, la columna oculta no cambiará su tamaño si se elimina la fila que contiene el valor de celda grande. El ajuste automático de tamaño no se produce cuando cambia la visibilidad, por lo que cambiar la propiedad de columna Visible a true no obligará a recalcular su tamaño en función de su contenido actual.

El cambio de tamaño basado en contenido mediante programación afecta a las filas, columnas y encabezados, independientemente de su visibilidad.

Cambio de tamaño mediante programación

Cuando el ajuste de tamaño automático está deshabilitado, puede establecer mediante programación el ancho o alto exacto de filas, columnas o encabezados con las siguientes propiedades:

También puede cambiar el tamaño de las filas, columnas y encabezados mediante programación para adaptarlo a su contenido con los métodos siguientes:

Estos métodos cambiarán el tamaño de las filas, columnas o encabezados una vez en lugar de configurarlos para el cambio de tamaño continuo. Los nuevos tamaños se calculan automáticamente para mostrar todo el contenido de la celda sin recortar. Sin embargo, al cambiar el tamaño de las columnas que tienen valores de propiedad InheritedAutoSizeMode de Fill mediante programación, los anchos calculados basados en contenido se usan para ajustar proporcionalmente los valores de propiedad de columna FillWeight y, a continuación, los anchos de columna se calculan según estas nuevas proporciones para que todas las columnas rellenen el área de presentación disponible del control.

El cambio de tamaño mediante programación es útil para evitar penalizaciones de rendimiento con el cambio de tamaño continuo. También es útil proporcionar tamaños iniciales para filas, columnas y encabezados que se pueden cambiar de tamaño del usuario, y para el modo de relleno de columnas.

Normalmente, llamará a los métodos de cambio de tamaño mediante programación en momentos específicos. Por ejemplo, puede cambiar el tamaño de todas las columnas inmediatamente después de cargar los datos, o puede cambiar el tamaño de una fila específica mediante programación después de modificar un valor de celda determinado.

Personalización del comportamiento del ajuste de tamaño basado en contenido

Puede personalizar los comportamientos del ajuste de tamaño al trabajar con tipos de celda, fila y columna derivados de DataGridView reemplazando los métodos DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight o DataGridViewColumn.GetPreferredWidth o haciendo llamadas a sobrecargas de métodos de cambio de tamaño protegidos en un control derivado de DataGridView. Las sobrecargas protegidas del método de cambio de tamaño están diseñadas para funcionar en pares y lograr una relación ideal de alto a ancho de celda, evitando celdas demasiado anchas o altas. Por ejemplo, si llama a la sobrecarga AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) del método AutoResizeRows y pasa un valor de false para el parámetro Boolean, la sobrecarga calculará los altos y anchos ideales para las celdas de la fila, pero solo ajustará el alto de fila. A continuación, debe llamar al método AutoResizeColumns para ajustar los anchos de columna al valor ideal calculado.

Opciones de ajuste de tamaño basado en contenido

Las enumeraciones usadas por las propiedades y métodos de ajuste de tamaño tienen valores similares para el ajuste de tamaño basado en contenido. Con estos valores, puede limitar las celdas que se usan para calcular los tamaños preferidos. Para todas las enumeraciones de tamaño, los valores con nombres que hacen referencia a celdas mostradas limitan sus cálculos a las celdas de filas mostradas. Excluir filas es útil para evitar una penalización de rendimiento cuando se trabaja con una gran cantidad de filas. También puede restringir los cálculos de valores de celda en celdas de encabezado o que no sean de encabezado.

Vea también