Datagridview的行自动调整大小

时间:2012-11-23 15:45:50

标签: .net datagridview rows autoresize

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

我已经设置了这个属性:

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 个答案:

答案 0 :(得分:5)

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

  

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

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

使用DataBindingComplete事件首次加载:

dataGridView1.DataBindingComplete += new
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

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

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

答案 1 :(得分:4)

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

DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True

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

答案 2 :(得分:0)

你在尝试什么不会工作。 您需要将AutoSizeMode设置为' none'然后改变列的宽度。 如果你手动设置列,它会更好用,因为我假设你已经知道你有哪些列。