在显示之前,DataGridView不会自动调整列

时间:2012-08-15 22:20:43

标签: c# .net winforms datagridview

我有一个自定义控件,当单击一个按钮时,该控件显示一个DataGridView弹出窗口。我想将弹出窗口的大小调整为DataGridView列的大小。我在创建DataGridView时设置了AutoSize模式。

dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

在计算总列大小之前,我还调用了以下方法。

public void AutoResize()
{
    dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells);
    dataGridView1.Refresh();
}

第一次显示弹出窗口时,它没有正确调整大小。据我所知,这是因为在dataGridView控件显示一次之前,列的AutoSize不会发生。

这是执行的顺序。

CreateCustomControl - > CreateDataGridView(带数据) - > AddToCustomControl - > CallAutoResize - > ShowCustomControl(使用DataGridView)

一个简单的解决方案是让我在显示后调整控件的大小。我仍然想知道为什么在显示控件之前不会发生AutoResize?

先谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这个解决方案适合你吗

dataGridView1.DataSource = your DataSource would be assigned here;
dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

for ( int i = 0; i < dataGridView1.Columns.Count; i++ )
{
    int colw = grd.Columns[i].Width;
    dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    dataGridView1.Columns[i].Width = colw;
}