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 .