Opciones de ajuste de tamaño en el control DataGridView de formularios Windows FormsSizing Options in the Windows Forms DataGridView Control

DataGridViewlas filas, columnas y encabezados pueden cambiar el tamaño como resultado de muchas repeticiones diferentes.DataGridView rows, columns, and headers can change size as a result of many different occurrences. En la tabla siguiente se muestran estas repeticiones.The following table shows these occurrences.

CasosOccurrence DESCRIPCIÓNDescription
Cambiar el tamaño del usuarioUser resize Los usuarios pueden realizar ajustes de tamaño arrastrando o haciendo doble clic en los divisores de fila, columna o encabezado.Users can make size adjustments by dragging or double-clicking row, column, or header dividers.
Cambiar el tamaño del controlControl resize En el modo de relleno de columna, 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.In column fill mode, column widths change when the control width changes; for example, when the control is docked to its parent form and the user resizes the form.
Cambio de valor de celdaCell value change En los modos de ajuste automático de tamaño basados en contenido, los tamaños cambian para ajustarse a los nuevos valores de presentación.In content-based automatic sizing modes, sizes change to fit new display values.
Llamada al métodoMethod call El cambio de tamaño basado en contenido mediante programación permite realizar ajustes de tamaño oportunista basados en valores de celda en el momento de la llamada al método.Programmatic content-based resizing lets you make opportunistic size adjustments based on cell values at the time of the method call.
Configuración de la propiedadProperty setting También puede establecer valores específicos de alto y ancho.You can also set specific height and width values.

De forma predeterminada, el cambio de tamaño de usuario está habilitado, el ajuste de tamaño automático está deshabilitado y los valores de celda más anchos que sus columnas se recortan.By default, user resizing is enabled, automatic sizing is disabled, and cell values that are wider than their columns are clipped.

En la tabla siguiente se muestran los escenarios que puede usar para ajustar el comportamiento predeterminado o para usar opciones de tamaño específicas para lograr efectos concretos.The following table shows scenarios that you can use to adjust the default behavior or to use specific sizing options to achieve particular effects.

EscenarioScenario ImplementaciónImplementation
Use 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.Use column fill mode for displaying similarly sized data in a relatively small number of columns that occupy the entire width of the control without displaying the horizontal scroll bar. Establezca la propiedad AutoSizeColumnsMode en Fill.Set the AutoSizeColumnsMode property to Fill.
Use el modo de relleno de columnas con valores de presentación de tamaños variables.Use column fill mode with display values of varying sizes. Establezca la propiedad AutoSizeColumnsMode en Fill.Set the AutoSizeColumnsMode property to Fill. Inicialice los anchos de columna relativos estableciendo las FillWeight propiedades de columna o llamando al AutoResizeColumns método de control después de llenar el control con datos.Initialize relative column widths by setting the column FillWeight properties or by calling the control AutoResizeColumns method after filling the control with data.
Use el modo de relleno de columnas con valores de importancia variable.Use column fill mode with values of varying importance. Establezca la propiedad AutoSizeColumnsMode en Fill.Set the AutoSizeColumnsMode property to Fill. Establezca valores MinimumWidth grandes para las columnas que siempre deben mostrar algunos de los datos o usar una opción de ajuste de tamaño distinta del modo de relleno para columnas específicas.Set large MinimumWidth values for columns that must always display some of their data or use a sizing option other than fill mode for specific columns.
Use el modo de relleno de columna para evitar que se muestre el fondo del control.Use column fill mode to avoid displaying the control background. Establezca la AutoSizeMode propiedad de la última columna en Fill y use otras opciones de ajuste de tamaño para las demás columnas.Set the AutoSizeMode property of the last column to Fill and use other sizing options for the other columns. Si las demás columnas utilizan demasiado espacio disponible, establezca la MinimumWidth propiedad de la última columna.If the other columns use too much of the available space, set the MinimumWidth property of the last column.
Mostrar una columna de ancho fijo, como un icono o una columna de identificador.Display a fixed-width column, such as an icon or ID column. Establezca AutoSizeMode en None y Resizable en paralacolumna.FalseSet AutoSizeMode to None and Resizable to False for the column. Inicialice su ancho estableciendo la Width propiedad o llamando al método de control AutoResizeColumn después de llenar el control con datos.Initialize its width by setting the Width property or by calling the control AutoResizeColumn method after filling the control with data.
Ajuste los tamaños automáticamente cada vez que cambie el contenido de la celda para evitar el recorte y optimizar el uso del espacio.Adjust sizes automatically whenever cell contents change to avoid clipping and to optimize the use of space. Establezca una propiedad de ajuste de tamaño automática en un valor que represente un modo de ajuste de tamaño basado en contenido.Set an automatic sizing property to a value that represents a content-based sizing mode. Para evitar una reducción del rendimiento al trabajar con grandes cantidades de datos, use un modo de ajuste de tamaño que solo calcule las filas mostradas.To avoid a performance penalty when working with large amounts of data, use a sizing mode that calculates displayed rows only.
Ajuste los tamaños para ajustar los valores de las filas mostradas para evitar las penalizaciones de rendimiento al trabajar con muchas filas.Adjust sizes to fit values in displayed rows to avoid performance penalties when working with many rows. Utilice los valores de enumeración de modo de ajuste de tamaño adecuados con el cambio de tamaño automático o mediante programación.Use the appropriate sizing-mode enumeration values with automatic or programmatic resizing. Para ajustar los tamaños de modo que se ajusten a los valores de las filas que se muestran recientemente mientras Scroll se desplaza, llame a un método de cambio de tamaño en un controlador de eventos.To adjust sizes to fit values in newly displayed rows while scrolling, call a resizing method in a Scroll event handler. Para personalizar el cambio de tamaño del usuario, de modo que solo los valores de las filas mostradas determinen los nuevos tamaños, RowDividerDoubleClick llame ColumnDividerDoubleClick a un método de cambio de tamaño en un controlador de eventos o.To customize user double-click resizing so that only values in displayed rows determine the new sizes, call a resizing method in a RowDividerDoubleClick or ColumnDividerDoubleClick event handler.
Ajuste los tamaños para ajustar el contenido de la celda solo en momentos concretos para evitar penalizaciones de rendimiento o para habilitar el cambio de tamaño del usuario.Adjust sizes to fit cell contents only at specific times to avoid performance penalties or to enable user resizing. Llame a un método de cambio de tamaño basado en contenido en un controlador de eventos.Call a content-based resizing method in an event handler. Por ejemplo, use el DataBindingComplete evento para inicializar los tamaños después del enlace y CellValidated controle el evento o CellValueChanged para ajustar los tamaños para compensar las modificaciones o los cambios de usuario en un origen de datos enlazado.For example, use the DataBindingComplete event to initialize sizes after binding, and handle the CellValidated or CellValueChanged event to adjust sizes to compensate for user edits or changes in a bound data source.
Ajuste el alto de las filas para el contenido de las celdas de varias líneas.Adjust row heights for multiline cell contents. Asegúrese de que los anchos de columna son adecuados para mostrar párrafos de texto y usar el ajuste de tamaño de fila basado en contenido automático o mediante programación para ajustar el alto.Ensure that column widths are appropriate for displaying paragraphs of text and use automatic or programmatic content-based row sizing to adjust the heights. Asegúrese también de que las celdas con contenido de varias líneas WrapMode se muestran utilizando un Truevalor de estilo de celda de.Also ensure that cells with multiline content are displayed using a WrapMode cell style value of True.

Normalmente, usará un modo de ajuste de tamaño de columna automático para mantener los anchos de columna o establecerlos en anchos específicos antes de que se ajuste el alto de las filas.Typically, you will use an automatic column sizing mode to maintain column widths or set them to specific widths before row heights are adjusted.

Cambiar el tamaño con el mouseResizing with the Mouse

De forma predeterminada, los usuarios pueden cambiar el tamaño de filas, columnas y encabezados que no usan un modo de ajuste de tamaño automático basado en valores de celda.By default, users can resize rows, columns, and headers that do not use an automatic sizing mode based on cell values. Para evitar que los usuarios cambien el tamaño con otros modos, como el modo de relleno de columnas, establezca una DataGridView o varias de las propiedades siguientes:To prevent users from resizing with other modes, such as column fill mode, set one or more of the following DataGridView properties:

También puede impedir que los usuarios cambien el tamaño de las filas o columnas Resizable individuales estableciendo sus propiedades.You can also prevent users from resizing individual rows or columns by setting their Resizable properties. De forma predeterminada, Resizable el valor de la propiedad se AllowUserToResizeColumns basa en el valor de la AllowUserToResizeRows propiedad para las columnas y el valor de la propiedad para las filas.By default, the Resizable property value is based on the AllowUserToResizeColumns property value for columns and the AllowUserToResizeRows property value for rows. Si se establece Resizable explícitamente True en Falseo, sin embargo, el valor especificado invalida el valor del control para esa fila o columna.If you explicitly set Resizable to True or False, however, the specified value overrides the control value is for that row or column. Establezca Resizable enNotSet para restaurar la herencia.Set Resizable to NotSet to restore the inheritance.

Dado NotSet que restaura la herencia de valores, la Resizable propiedad nunca devolverá NotSet un valor a menos que la fila o columna no se haya DataGridView agregado a un control.Because NotSet restores the value inheritance, the Resizable property will never return a NotSet value unless the row or column has not been added to a DataGridView control. Si necesita determinar si el Resizable valor de propiedad de una fila o columna es heredado, examine su State propiedad.If you need to determine whether the Resizable property value of a row or column is inherited, examine its State property. Si el State valor incluye la ResizableSet marca, el Resizable valor de la propiedad no se hereda.If the State value includes the ResizableSet flag, the Resizable property value is not inherited.

Ajuste automático de tamañoAutomatic Sizing

Hay dos tipos de ajuste automático de tamaño en DataGridView el control: el modo de relleno de columnas y el ajuste automático de tamaño basado en contenido.There are two kinds of automatic sizing in the DataGridView control: column fill mode and content-based automatic sizing.

El modo de relleno de columnas hace que las columnas visibles del control rellenen el ancho del área de presentación del control.Column fill mode causes the visible columns in the control to fill the width of the control's display area. Para obtener más información sobre este modo, vea el modo de relleno de columnas en el control DataGridView de Windows Forms.For more information about this mode, see Column Fill Mode in the Windows Forms DataGridView Control.

También puede configurar filas, columnas y encabezados para ajustar automáticamente sus tamaños para ajustarse al contenido de las celdas.You can also configure rows, columns, and headers to automatically adjust their sizes to fit their cell contents. En este caso, el ajuste de tamaño se produce cada vez que cambia el contenido de la celda.In this case, size adjustment occurs whenever cell contents change.

Nota

Si mantiene los valores de celda en una memoria 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 cuando CellValuePushed se modifica un valor almacenado en caché fuera de un controlador de eventos.If you maintain cell values in a custom data cache using virtual mode, automatic sizing occurs when the user edits a cell value but does not occur when you alter a cached value outside of a CellValuePushed event handler. En este caso, llame UpdateCellValue al método para forzar que el control actualice la presentación de la celda y aplique los modos de ajuste automático de tamaño actuales.In this case, call the UpdateCellValue method to force the control to update the cell display and apply the current automatic sizing modes.

Si el ajuste automático de tamaño basado en contenido está habilitado solo para una dimensión (es decir, para las filas pero no para las columnas, o WrapMode para las columnas pero no para las filas) y también está habilitado, el ajuste de tamaño también se produce siempre que cambia la otra dimensión.If content-based automatic sizing is enabled for one dimension only—that is, for rows but not columns, or for columns but not rows—and WrapMode is also enabled, size adjustment also occurs whenever the other dimension changes. Por ejemplo, si las filas pero no las columnas están configuradas WrapMode para el ajuste automático de tamaño y está habilitada, los usuarios pueden arrastrar los divisores de columna para cambiar el ancho de una columna y los altos de las filas se ajustarán automáticamente para que el contenido de la celda se siga mostrando por completo.For example, if rows but not columns are configured for automatic sizing and WrapMode is enabled, users can drag column dividers to change the width of a column and row heights will automatically adjust so that cell contents are still fully displayed.

Si configura filas y columnas para el ajuste automático de tamaño basado en contenido WrapMode y está habilitado DataGridView , el control ajustará los tamaños cada vez que cambie el contenido de la celda y utilizará una relación de alto a ancho de celda ideal al calcular nuevos tamaños.If you configure both rows and columns for content-based automatic sizing and WrapMode is enabled, the DataGridView control will adjust sizes whenever cell contents changed and will use an ideal cell height-to-width ratio when calculating new sizes.

Para configurar el modo de ajuste de tamaño para encabezados y filas y para las columnas que no invalidan el valor del control, establezca una DataGridView o varias de las propiedades siguientes:To configure the sizing mode for headers and rows and for columns that do not override the control value, set one or more of the following DataGridView properties:

Para invalidar el modo de ajuste de tamaño de columna del control para una AutoSizeMode columna individual, establezca su propiedad NotSeten un valor distinto de.To override the control's column sizing mode for an individual column, set its AutoSizeMode property to a value other than NotSet. El modo de ajuste de tamaño de una columna está determinado InheritedAutoSizeMode realmente por su propiedad.The sizing mode for a column is actually determined by its InheritedAutoSizeMode property. El valor de esta propiedad se basa en el valor de AutoSizeMode la propiedad de la columna, NotSeta menos que ese valor sea, AutoSizeColumnsMode en cuyo caso se hereda el valor del control.The value of this property is based on the column's AutoSizeMode property value unless that value is NotSet, in which case the control's AutoSizeColumnsMode value is inherited.

Use el cambio de tamaño automático basado en el contenido con precaución al trabajar con grandes cantidades de datos.Use content-based automatic resizing with caution when working with large amounts of data. Para evitar las penalizaciones de rendimiento, use los modos de ajuste automático de tamaño que calculan los tamaños basados solo en las filas mostradas en lugar de analizar todas las filas del control.To avoid performance penalties, use the automatic sizing modes that calculate sizes based only on the displayed rows rather than analyzing every row in the control. Para obtener el máximo rendimiento, utilice 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.For maximum performance, use programmatic resizing instead so that you can resize at specific times, such as immediately after new data is loaded.

Los modos de ajuste automático de tamaño basados en contenido no afectan a las filas, columnas o encabezados que haya ocultado estableciendo la propiedad Visible de fila o columna RowHeadersVisible , o el falsecontrol o ColumnHeadersVisible las propiedades en.Content-based automatic sizing modes do not affect rows, columns, or headers that you have hidden by setting the row or column Visible property or the control RowHeadersVisible or ColumnHeadersVisible properties to false. Por ejemplo, si una columna está oculta una vez que se ajusta automáticamente para ajustarse 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.For example, if a column is hidden after it is automatically sized to fit a large cell value, the hidden column will not change its size if the row containing the large cell value is deleted. El ajuste automático de tamaño no se produce cuando cambia la visibilidad, Visible por lo que true el cambio de la propiedad de columna a no obliga a que vuelva a calcular su tamaño en función de su contenido actual.Automatic sizing does not occur when visibility changes, so changing the column Visible property back to true will not force it to recalculate its size based on its current contents.

El cambio de tamaño basado en contenido mediante programación afecta a filas, columnas y encabezados, independientemente de su visibilidad.Programmatic content-based resizing affects rows, columns, and headers regardless of their visibility.

Cambio de tamaño mediante programaciónProgrammatic Resizing

Cuando el ajuste de tamaño automático está deshabilitado, puede establecer mediante programación el ancho o el alto exacto de filas, columnas o encabezados a través de las siguientes propiedades:When automatic sizing is disabled, you can programmatically set the exact width or height of rows, columns, or headers through the following properties:

También puede cambiar mediante programación el tamaño de filas, columnas y encabezados para ajustar su contenido mediante los métodos siguientes:You can also programmatically resize rows, columns, and headers to fit their contents using the following methods:

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.These methods will resize rows, columns, or headers once rather than configuring them for continuous resizing. Los nuevos tamaños se calculan automáticamente para mostrar todo el contenido de la celda sin recortes.The new sizes are automatically calculated to display all cell contents without clipping. Sin embargo, al cambiar mediante programación el tamaño InheritedAutoSizeMode de las columnas Fillque tienen valores de propiedad de, se usan los anchos basados en el contenido calculados para FillWeight ajustar proporcionalmente los valores de las propiedades de columna y los anchos de columna reales. después, se calcula según estas nuevas proporciones para que todas las columnas rellenen el área de presentación disponible del control.When you programmatically resize columns that have InheritedAutoSizeMode property values of Fill, however, the calculated content-based widths are used to proportionally adjust the column FillWeight property values, and the actually column widths are then calculated according to these new proportions so that all columns fill the available display area of the control.

El cambio de tamaño mediante programación es útil para evitar las penalizaciones de rendimiento con el cambio de tamaño continuo.Programmatic resizing is useful to avoid performance penalties with continuous resizing. También resulta útil proporcionar tamaños iniciales para filas, columnas y encabezados de tamaño ajustable por el usuario, así como para el modo de relleno de columnas.It is also useful to provide initial sizes for user-resizable rows, columns, and headers, and for column fill mode.

Normalmente, se llama a los métodos de cambio de tamaño mediante programación en momentos concretos.You will typically call the programmatic resizing methods at specific times. Por ejemplo, puede cambiar mediante programación el tamaño de todas las columnas inmediatamente después de cargar los datos, o puede cambiar mediante programación el tamaño de una fila concreta después de que se haya modificado un valor de celda determinado.For example, you might programmatically resize all columns immediately after loading data, or you might programmatically resize a specific row after a particular cell value has been modified.

Personalizar el comportamiento de ajuste de tamaño basado en contenidoCustomizing Content-based Sizing Behavior

Puede personalizar los comportamientos de ajuste de tamaño al DataGridView trabajar con tipos de celda, fila y columna derivados invalidando los DataGridViewColumn.GetPreferredWidth métodos, DataGridViewRow.GetPreferredHeighto o llamando a las sobrecargas del DataGridViewCell.GetPreferredSizemétodo de cambio DataGridView de tamaño protegido en una derivada control.You can customize sizing behaviors when working with derived DataGridView cell, row, and column types by overriding the DataGridViewCell.GetPreferredSize, DataGridViewRow.GetPreferredHeight, or DataGridViewColumn.GetPreferredWidth methods or by calling protected resizing method overloads in a derived DataGridView control. Las sobrecargas del método de cambio de tamaño protegido están diseñadas para funcionar en pares con el fin de lograr una relación de alto y ancho de celda ideal, evitando celdas demasiado anchas o grandes.The protected resizing method overloads are designed to work in pairs to achieve an ideal cell height-to-width ratio, avoiding overly wide or tall cells. Por ejemplo, si se llama a AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) la sobrecarga AutoResizeRows del método y se pasa un valor de false para el Boolean parámetro, la sobrecarga calculará los altos y anchos ideales para las celdas de la fila, pero ajustará el alto de las filas. tan.For example, if you call the AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) overload of the AutoResizeRows method and pass in a value of false for the Boolean parameter, the overload will calculate the ideal heights and widths for cells in the row, but it will adjust the row heights only. A continuación, debe llamar AutoResizeColumns al método para ajustar el ancho de las columnas al ideal calculado.You must then call the AutoResizeColumns method to adjust the column widths to the calculated ideal.

Opciones de ajuste de tamaño basado en contenidoContent-based Sizing Options

Las enumeraciones usadas por las propiedades y los métodos de ajuste de tamaño tienen valores similares para el ajuste de tamaño basado en contenido.The enumerations used by sizing properties and methods have similar values for content-based sizing. Con estos valores, puede limitar qué celdas se usan para calcular los tamaños preferidos.With these values, you can limit which cells are used to calculate the preferred sizes. En todas las enumeraciones de tamaño, los valores cuyos nombres hacen referencia a las celdas mostradas limitan sus cálculos a las celdas de las filas mostradas.For all sizing enumerations, values with names that refer to displayed cells limit their calculations to cells in displayed rows. Excluir filas resulta útil para evitar una reducción del rendimiento cuando se trabaja con una gran cantidad de filas.Excluding rows is useful to avoid a performance penalty when you are working with a large quantity of rows. También puede restringir los cálculos a los valores de celda en las celdas de encabezado o de no encabezado.You can also restrict calculations to cell values in header or nonheader cells.

Vea tambiénSee also