c# - DataGridView 在显示之前不会自动调整列大小

标签 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 控件显示一次之前不会发生列的自动调整大小。

这是执行顺序。

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

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

在此先感谢您的帮助。

最佳答案

这个解决方案对你有用吗<​​/p>

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;
}

关于c# - DataGridView 在显示之前不会自动调整列大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11978181/

相关文章:

c# - 在 MS Excel 中打开时无法写入文件

c# - Monotouch 检查两个框架的碰撞

asp.net - 我们可以通过 .net native 编译一个 asp.net 5 应用程序吗?

c# - 使用 ViewModel 的 Winforms 数据绑定(bind)

c# - 该变量未声明或从未分配警告

C# 将参数传递给 Sysinternals Autologon.exe

c# - Asp.net core 2.0 RequireHttpsMetadata=false 用于开发

c# - 使用 ITextSharp 生成 XPS 文档而不是 PDF?

.net - 将电子邮件地址设置为 ASP.NET 成员资格提供程序中的用户名

c# - 在 Winforms 中更改 ListBox 的 "selected"颜色?