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 只显示第一个,而所有其他的都被隐藏了,因为该行不会自动调整大小。

关于任何其他方式的任何想法。

4

3 回答 3

5

您需要在数据更改后调用 resize 方法。来自 MSDN 文章DataGridView.AutoResizeRows()

每次方法调用仅调整一次行高;如果以后行的内容发生变化,行将不会自动调整。

这意味着您需要在第一次和任何后续加载网格之后调用该方法。如果您在父窗体的控制器中调用此代码,则数据绑定尚未发生,因此数据不存在。

对于使用DataBindingComplete事件的第一次加载:

dataGridView1.DataBindingComplete += new
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

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

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

于 2012-11-23T16:19:33.607 回答
4

我找到了解决这个问题的方法。而不是使用网格或行的自动调整大小属性,我应该使用 wrapmode 来应用于所有网格的单元格。

DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True

这适用于所有单元格并且有效。

于 2012-11-23T18:41:22.590 回答
0

你正在尝试的不会工作。您需要将 AutoSizeMode 设置为“无”,然后更改列的宽度。如果您手动设置列,效果会更好,因为我假设您已经知道您拥有哪些列。

于 2018-03-22T13:56:45.000 回答