强制调整DataGridView列的大小

7

我有一个简单的表单,上面有一个DataGridView元素。在构造函数中添加了网格列并设置了DataTable。当我调用AutoResizeColumns()时,它不会像在按下按钮事件时那样自动调整列宽。

代码如下(简化):

public MyDialog()
{
   InitializeComponent();
   dgv.Columns.AddRange(SomeClass.MyColumns);
   dgv.DataSource = SomeClass.Table;
   // This doesn't work:
   dgv.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}

AutoResizeColumns()通常是有效的,但在那个点上却不行。顺便说一下,我需要这样实现一种行为,就像这里所请求/描述的那样。有什么主意吗?

4个回答

16

我之前也遇到过同样的问题,直到我设置了自动调整大小模式:

dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

2
请您加上 dgv. 和一个分号,好吗? - Superbest

10

此外,我认为在调整大小之前需要使对象可见...由于某些原因,绘制似乎不会按预期进行。


是的,它确实可以。我刚刚用我正在开发的一个项目进行了确认。 - Taegost
1
对于手动加载行的DataGridView(没有datatable数据源),我使用VisibleChanged事件。在所有行都加载完毕后,它会被触发。在其中添加我的AutoResizeColumns(),你就可以了。你甚至可以检查visible = true以减少开销。 - Smitty-Werben-Jager-Manjenson
1
@Smitty-Werben-Jager-Manjenson,是的,VisibleChanged可以工作,但他们面临的根本问题是在对象可见之前调整大小没有真正的尺寸上下文可用。 - DRapp

2

在你的DataGridView中有数据后,你需要使用AutoResizeColumns()。这就是原因所在。确保在调用AutoResizeColumns()之前SomeClass.Table获取了数据。


我希望用户能够调整大小,将所有列设置为无法调整大小可以实现这一点。但我也希望初始显示自适应所有内容。因此,我在数据绑定完成事件中添加了以下代码,它让我同时拥有了两个世界的最佳体验:dataGridViewGameList.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); - Matt

0

你还需要设置DataGridView的AutoSizeColumnsMode属性


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接