Datagridview的行自动调整大小

9

我将尝试自动调整一行的高度,但发现这很具有挑战性。

我已经设置了以下属性:

DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells.

我也用另一种方法做到了这一点:
DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders)

同时,通过使用以下方法逐行操作:
DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells)

而且,即使将行高硬编码为大值,它也无效!! 所有的行都按照它们的默认高度显示。
这些方法都不起作用。我已经没有其他选择了。
datagridview中的大多数行不需要调整大小。但其中一个行填充了像这样的值:
"a" + "\ n" + b + "\ n" + "c" + "\ n" + "d" + "\ n" + "e"
我的意思是,短值但在不同的行上。我必须分别显示它们,不能将它们全部显示在一起。 但是datagridview仅显示第一个,所有其他行都被隐藏,因为行不会自动调整大小。
有任何其他方法吗?
3个回答

5
在数据发生改变后,您需要调用resize方法。根据MSDN上的DataGridView.AutoResizeRows()文章:
引用: 行高度仅在每次方法调用时调整一次;如果稍后更改了行的内容,则行不会自动调整。
这意味着您需要在第一次和任何后续加载网格后调用该方法。如果您在父表单控制器中调用此代码,则尚未发生数据绑定,因此数据不在那里。
对于使用DataBindingComplete事件进行首次加载:
dataGridView1.DataBindingComplete += new
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells);
}

对于后续对单元格的更新,您需要自己找到最佳位置。


你当前的方法无法正常工作的原因很可能是因为你将代码放在了表单构造函数或onload事件中。 - David Hall
不,实际上我是在将GridSource设置为DataGridView之后执行此操作。它已经被填充了。这是我做的最后一件事情。 - monican
@user1062568 你什么时候做这个?在哪个事件处理程序中?即使你在源已经设置之后进行操作,那也不够,你必须在数据绑定完成后进行操作。例如,在窗体构造函数中设置源,然后调用resize all,这将不会改变高度。 - David Hall
在网格准备好之后,我才开始处理它。实际上我是逐行添加的,使用了Rows.Add()方法。因此不需要绑定。无论如何,我已经找到了另一种属性的解决方案。还是谢谢你的帮助! - monican

4

很高兴你找到了解决方案(我假定你已经设置了wrapmode并且看到了多行溢出网格单元区域)。我将保留我的答案,因为它适用于不同的问题(如果您更新任何单元格并增加数据长度,则不会自动触发调整大小)。 - David Hall
2
哦 - 并将其标记为答案,以便问题从未回答的列表中删除。 - David Hall

0

你现在尝试的方法行不通。 你需要将AutoSizeMode设置为“none”,然后更改列的宽度。 如果你已经知道有哪些列,手动设置列会更好用。


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