Datagridview的行自动调整大小

mon*_*can 9 .net datagridview rows autoresize

我正在尝试自动调整行的高度,我发现它非常具有挑战性.

我已经设置了这个属性:

DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells.
Run Code Online (Sandbox Code Playgroud)

我也用其他方法制作了它:

DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders)
Run Code Online (Sandbox Code Playgroud)

并且还逐行使用:

DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells)
Run Code Online (Sandbox Code Playgroud)

甚至还将行的高度硬编码到一个很大的值,它也无法正常工作!所有行都以默认高度显示.

这些都没有奏效.我的选择已经用完了.

datagridview中的大多数行不需要调整大小.但其中一个充满了这样的价值观:

"a"+"\n"+ b +"\n"+"c"+"\n"+"d"+"\n"+"e"

我的意思是,短期值但不同的行.我必须用不同的线条展示它们,不能一起展示它们.但是datagridview只显示第一个,而所有其他的都隐藏了,因为该行没有自动调整大小.

任何其他方式的想法.

Dav*_*all 5

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

每个方法调用仅调整行高度一次; 如果稍后行的内容发生更改,则行不会自动调整.

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

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

dataGridView1.DataBindingComplete += new
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells);
}
Run Code Online (Sandbox Code Playgroud)

要稍后更新单元格,您需要自己找到最佳位置.


mon*_*can 4

我已经找到了这个问题的解决方案。我不应该使用网格或行的自动调整大小属性,而应该使用换行模式应用于所有网格的单元格。

DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True

这适用于所有细胞并且有效。

  • 哦 - 并将其标记为答案,这样问题就会从未回答的列表中消失。 (2认同)