una tamaño tabla imagen formulario fila contenido configurar celda cambiar alto ajustar c# winforms datagridview

c# - tabla - Altura automática de DataGridView: cómo ajustar automáticamente el tamaño de Altura de Grilla de datos



configurar datagridview c# (1)

Estoy tratando de hacer que la altura de mi DataGridView AutoSize se base en la cantidad de filas que contiene. Actualmente, pude lograr esto con la siguiente línea:

dataGridView_SearchResults.AutoSize = true;

Sin embargo, esto hace que la barra de desplazamiento Horizontal desaparezca, el DataGridView se corta.

¿Cómo puedo autoesificar la altura sin perder la barra de desplazamiento horizontal?


Opción 1 - Anulación de GetPreferredSize

Puede anular el método GetPreferredSize de DataGridView y llamar al método base utilizando el tamaño new Size(this.Width, proposedSize.Height) propuesto new Size(this.Width, proposedSize.Height) . De esta forma, el ancho de control actual permanecerá intacto mientras que las reglas de tamaño automático se aplicarán en su altura:

using System.Drawing; using System.Windows.Forms; public class MyDataGridView : DataGridView { public override Size GetPreferredSize(Size proposedSize) { return base.GetPreferredSize(new Size(this.Width, proposedSize.Height)); } }

Opción 2: configuración de la altura según la altura del tamaño automático calculado

Si no desea derivar de DataGridView , puede calcular el tamaño automático llamando a su GetPreferredSize pasando el new Size(0, 0) luego establecer el alto de DataGridView a la altura del resultado, de esta manera solo cambia la altura de DataGridView . Debería establecer la altura automática en RowsAdded , RowsRemoved , algunos otros eventos si necesita:

void AutoHeightGrid(DataGridView grid) { var proposedSize = grid.GetPreferredSize(new Size(0, 0)); grid.Height = proposedSize.Height; } private void Form1_Load(object sender, EventArgs e) { dataGridView1.RowsAdded += (obj, arg) => AutoHeightGrid(dataGridView1); dataGridView1.RowsRemoved += (obj, arg) => AutoHeightGrid(dataGridView1); //Set data source //dataGridView1.DataSource = something; }

Si desea asegurarse de que todos los cambios en la cuadrícula, incluida la modificación de la Font , la altura de las filas causará el cambio de tamaño de la cuadrícula, puede llamar al método en Paint event.

Opción 3 - Configuración MaximumSize

También como menciona Hans, si no desea derivar de DataGridView , puede usar la propiedad MaximumSize de la grilla. Puede establecerlo en un new Size(this.dataGridView1.Width, 0) :

dataGridView1.MaximumSize = new Size(this.dataGridView1.Width, 0); dataGridView1.AutoSize = true;

Nota

Dado que el uso de MaximumSize no es tan amigable cuando el usuario desea que el ancho de la cuadrícula cambie por los anclajes izquierdo y derecho, prefiero usar la Opción 1 o la Opción 2 .