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 .