我正在尝试自动调整行的高度,我发现它非常具有挑战性。
我已经设置了这个属性:
DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells.
我也使用其他方法:
DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders)
并且也是一行一行地使用:
DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells)
甚至还将行的高度硬编码为一个很大的值,它也不起作用!!所有行都以默认高度显示。
这些都没有奏效。我的选择已经用完了。
datagridview中的大多数行不需要调整大小。但其中一个充满了这样的价值观:
“a”+“\ n”+ b +“\ n”+“c”+“\ n”+“d”+“\ n”+“e”
我的意思是,短期值但不同的行。我必须用不同的线条展示它们,不能一起展示它们。 但是datagridview只显示第一个,而所有其他的都隐藏了,因为该行没有自动调整大小。
任何其他方式的想法。
答案 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'然后改变列的宽度。 如果你手动设置列,它会更好用,因为我假设你已经知道你有哪些列。