Compartir a través de


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

Actualización: noviembre 2007

Las filas, columnas y encabezados de DataGridView pueden cambiar de tamaño por causas muy distintas. La siguiente tabla muestra estas causas.

Causa

Descripción

Cambio de tamaño por el usuario

Los usuarios pueden realizar ajustes de tamaño arrastrando o haciendo doble clic en divisores de fila, columna o encabezado.

Cambio de tamaño de los controles

En una columna en modo de relleno, los anchos de columna cambian cuando el ancho del control cambia; por ejemplo, cuando se acopla un control a su elemento primario y el usuario cambia el tamaño del formulario.

Cambio de un valor de celda

En los modos de ajuste automático del tamaño basado en contenido, los tamaños cambian para adaptarse a los nuevos valores de presentación.

Llamada a método

El cambio de tamaño basado en contenido mediante programación permite realizar ajustes de tamaño oportunos basándose en valores de celda en el momento de la llamada al método.

Valor de propiedades

También puede establecer valores de alto y ancho concretos.

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

En la tabla siguiente se muestran escenarios que puede utilizar para ajustar el comportamiento predeterminado o para utilizar opciones de tamaño concretas con el fin de lograr efectos determinados.

Escenario

Implementación

Utilice el modo de relleno de columna para mostrar datos con tamaño similar en un número de columnas relativamente pequeño que ocupan el ancho completo del control sin mostrar la barra de desplazamiento horizontal.

Establezca la propiedad AutoSizeColumnsMode en Fill.

Utilice el modo de relleno de columna con valores de presentación de tamaños variables.

Establezca la propiedad AutoSizeColumnsMode en Fill. Inicialice los anchos de columna relativos estableciendo las propiedades FillWeight de columna o llamando al método AutoResizeColumns del control después de rellenar el control con datos.

Utilice el modo de relleno de columna con valores de importancia variable.

Establezca la propiedad AutoSizeColumnsMode en Fill. Establezca valores de MinimumWidth elevados para columnas que deben mostrar siempre algunos de los datos o utilice una opción de tamaño que no sea el modo de relleno para columnas concretas.

Utilice el modo de relleno de columna para evitar que se muestre el fondo del control.

Establezca la propiedad AutoSizeMode de la última columna en Fill y utilice otras opciones de tamaño para las otras columnas. Si las demás columnas utilizan en exceso el espacio disponible, establezca la propiedad MinimumWidth de la última columna.

Muestre una columna de ancho fijo, como un icono o un Id. de columna.

Establezca AutoSizeMode en None y Resizable en False para la columna. Para inicializar el ancho establezca la propiedad Width o llame al método AutoResizeColumn del control después de rellenar el control con datos.

Ajuste tamaños automáticamente cada vez que cambia el contenido de la celda para evitar el recorte y optimizar el uso de espacio.

Establezca una propiedad de tamaño automático en un valor que representa un modo de tamaño basado en contenido. Para evitar una reducción del rendimiento al trabajar con grandes volúmenes de datos, utilice un modo de tamaño que sólo calcule las filas mostradas.

Ajuste tamaños para encajar los valores en las filas mostradas con el fin de impedir reducciones del rendimiento al trabajar con muchas filas.

Utilice los valores de enumeración del modo de tamaño adecuados con el cambio de tamaño automático o mediante programación. Para ajustar tamaños con el fin de adaptar valores de filas recién presentadas cuando se desplaza, llame a un método de cambio de tamaño en un controlador de eventos Scroll. Para personalizar el cambio de tamaño con doble clic por parte del usuario de modo que sólo los valores de las filas mostradas determinen los nuevos tamaños, llame al método de cambio de tamaño de un controlador de eventos RowDividerDoubleClick o ColumnDividerDoubleClick.

Ajuste tamaños para adaptar el contenido de la celda sólo en momentos concretos con el fin de impedir las reducciones del rendimiento o para habilitar el cambio de tamaño por parte del usuario.

Llame a un método de cambio de tamaño basado en contenido en un controlador de eventos. Por ejemplo, utilice el evento DataBindingComplete para inicializar tamaños después del enlace y controlar el evento CellValidated o CellValueChanged para ajustar tamaños con el fin de compensar las modificaciones o cambios del usuario en un origen de datos enlazado.

Ajuste los altos de fila para el contenido de celdas de varias líneas.

Garantice que los anchos de columna son adecuados para mostrar párrafos de texto y utilice el tamaño de fila automático o basado en contenido para ajustar los altos. También garantice que se muestran las celdas con contenido de varias líneas utilizando un valor de estilo de celda WrapMode de True.

Normalmente, utilizará un modo de tamaño automático de columna para mantener los anchos de columna o establecerlos en los anchos concretos antes de que se ajusten los altos de fila.

Cambiar el tamaño con el mouse

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

También puede evitar que los usuarios cambien el tamaño de filas o columnas individuales estableciendo sus propiedades Resizable. De forma predeterminada, el valor de la propiedad Resizable se basa en el valor de la propiedad AllowUserToResizeColumns para columnas y el valor de la propiedad AllowUserToResizeRows para filas. Si establece explícitamente Resizable en True o False, sin embargo, el valor especificado reemplaza al valor de control que es 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 no ser que no se haya agregado la fila o columna a un control DataGridView. Si necesita determinar si se hereda el valor de la propiedad Resizable de una fila o columna, examine la propiedad State. Si el valor State incluye el indicador ResizableSet, no se heredará el valor de la propiedad Resizable.

Tamaño automático

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

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

También puede configurar filas, columnas y encabezados para que ajusten automáticamente el tamaño con el fin de adaptarlo al contenido de la 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 con el modo virtual, se produce el ajuste de tamaño automático cuando el usuario modifica un valor de celda pero no cuando altera un valor almacenado en memoria caché fuera de un controlador de eventos CellValuePushed. En este caso, llame al método UpdateCellValue para forzar que el control actualice la presentación de celda y aplique los modos de tamaño automático actuales.

Si el ajuste automático del tamaño basado en contenido está habilitado sólo para una dimensión, es decir, para filas pero no para columnas o para columnas pero no para filas, y también está habilitado WrapMode, también se produce el ajuste de tamaño cada vez que cambia la otra dimensión. Por ejemplo, si se configuran las filas pero no las columnas para el ajuste de tamaño automático y está habilitado WrapMode, los usuarios pueden arrastrar los divisores de columna para cambiar el ancho de una columna y se ajustarán automáticamente los altos de fila de modo que el contenido de la celda se siga mostrando por completo.

Si configura filas y columnas para el ajuste automático del tamaño basado en contenido y está habilitado WrapMode, el control DataGridView ajustará los tamaños cada vez que se modifique el contenido de la celda y utilizará una relación de alto con ancho de celda cuando calcule nuevos tamaños.

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

Para reemplazar el modo de tamaño de columna del control para una columna individual, establezca la propiedad AutoSizeMode en un valor distinto de NotSet. Su propiedad InheritedAutoSizeMode determina realmente el modo de tamaño de una columna. El valor de esta propiedad se basa en el valor de la propiedad AutoSizeMode de la columna a no ser que el valor sea NotSet, en cuyo caso se heredará el valor AutoSizeColumnsMode del control.

Utilice con precaución el cambio de tamaño automático basado en contenido cuando trabaje con grandes volúmenes de datos. Para impedir una reducción del rendimiento, utilice los modos de tamaño automático que calculan tamaños basándose sólo en las filas mostradas en lugar de analizar todas las filas del control. Para obtener un rendimiento máximo, utilice en su lugar el cambio de tamaño mediante programación para que pueda cambiar el tamaño en momentos concretos, como inmediatamente después de que se cargan los nuevos datos.

Los modos de ajuste automático del tamaño basado en contenido no afectan a filas, columnas o encabezados que haya ocultado estableciendo la propiedad Visible de fila o columna o las propiedades RowHeadersVisible o ColumnHeadersVisible del control en false. Por ejemplo, si se oculta una columna después de que se ajusta automáticamente el tamaño para adaptarse a un valor de celda elevado, la columna oculta no cambiará el tamaño si se elimina la fila que contiene el valor de celda elevado. El tamaño automático no se produce cuando cambia la visibilidad, de modo que al cambiar la propiedad Visible de la columna de nuevo a true no se forzará que se vuelva a calcular su tamaño basándose en el contenido actual.

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

Cambio de tamaño mediante programación

Cuando se deshabilita el tamaño automático, puede establecer mediante programación el ancho o alto exacto de filas, columnas o encabezados a través de las propiedades siguientes:

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

Estos métodos cambiarán el tamaño de 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 las celdas sin recortar. Cuando cambia el tamaño mediante programación de las columnas que tienen valores de la propiedad InheritedAutoSizeMode de Fill, no obstante, se utilizan los anchos basados en contenido calculados para ajustar de forma proporcional los valores de la propiedad FillWeight de la columna y los anchos de columna se calculan realmente según estas nuevas proporciones de modo que todas las columnas rellenen el área de presentación disponible del control.

El cambio de tamaño mediante programación resulta de utilidad para evitar las reducciones del rendimiento con el cambio continuo de tamaño. También resulta de utilidad para proporcionar tamaños iniciales a filas, columnas y encabezados de cambio de tamaño por el usuario y al modo de relleno de columna.

Llamará normalmente a los métodos de cambio de tamaño mediante programación en momentos concretos. Por ejemplo, podría cambiar mediante programación el tamaño de todas las columnas inmediatamente después de cargar datos o de una fila concreta después de que se haya modificado un valor de celda concreto.

Personalizar el comportamiento del tamaño basado en contenido

Puede personalizar los comportamientos del tamaño cuando trabaja con tipos de celda, fila y columna de DataGridView derivados reemplazando los métodos DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight o DataGridViewColumn.GetPreferredWidth o llamando a sobrecargas de método de cambio de tamaño protegido en un control DataGridView derivado. Las sobrecargas de método de cambio de tamaño protegido están diseñadas para trabajar en pares con el fin de lograr una relación de alto y ancho de celda ideal, lo que impide que haya 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 en el parámetro Boolean, la sobrecarga calculará los altos y anchos ideales de las celdas de la fila, pero ajustará sólo los altos de fila. Debe llamar a continuación al método AutoResizeColumns para ajustar los anchos de columna al ideal calculado.

Opciones de tamaño basado en contenido

Las enumeraciones que las propiedades y métodos de ajuste de tamaño utilizan tienen valores similares para el ajuste de tamaño basado en contenido. Con estos valores, puede limitar qué celdas se utilizarán para calcular los tamaños preferidos. Para todas las enumeraciones de tamaño, los valores con nombres que hacen referencia a las celdas mostradas limitan los cálculos a celdas de filas mostradas. Cuando se trabaja con un gran volumen de filas resulta de utilidad excluir filas con el fin de impedir una reducción del rendimiento. También puede restringir los cálculos a los valores de celda en celdas con o sin encabezado.

Vea también

Tareas

Cómo: Establecer modos de cambio de tamaño para el control DataGridView de formularios Windows Forms

Conceptos

Modo de relleno de columnas en el control DataGridView de formularios Windows Forms

Referencia

DataGridView

DataGridView.AllowUserToResizeColumns

DataGridView.AllowUserToResizeRows

DataGridView.ColumnHeadersHeightSizeMode

DataGridView.RowHeadersWidthSizeMode

DataGridViewBand.Resizable

DataGridView.AutoSizeColumnsMode

DataGridView.AutoSizeRowsMode

DataGridViewColumn.AutoSizeMode

DataGridViewColumn.InheritedAutoSizeMode

DataGridView.RowHeadersWidth

DataGridView.ColumnHeadersHeight

DataGridViewRow.Height

DataGridViewColumn.Width

DataGridView.AutoResizeColumn

DataGridView.AutoResizeColumns

DataGridView.AutoResizeColumnHeadersHeight

DataGridView.AutoResizeRow

DataGridView.AutoResizeRows

DataGridView.AutoResizeRowHeadersWidth

DataGridViewAutoSizeRowMode

DataGridViewAutoSizeRowsMode

DataGridViewAutoSizeColumnMode

DataGridViewAutoSizeColumnsMode

DataGridViewColumnHeadersHeightSizeMode

DataGridViewRowHeadersWidthSizeMode

Otros recursos

Cambiar el tamaño de columnas y filas en el control DataGridView de formularios Windows Forms