我尝试在Designer中控制列,并在Designer或Code中更改所有行的高度。下面的代码和设置更改了除第一行以外的所有行的高度,如图像所示。
private void Form1_Load(object sender, EventArgs e)
{
Text = dataGridView1.Rows[0].Height.ToString(); // always 33
// in Designer
// RowTemplate.Height = 50
// AutoSizeRowsMode = none
}
在我填充第一行单元格后,创建了50行高的行。运行时代码没有任何区别。为了解决这个问题,我必须在绘制网格后编写dataGridView1.Rows[0].Height = 50
。为什么要这样做?如何在设计器级别实现?
1条答案
按热度按时间aemubtdh1#
如果未将DataSource设置为DataGridView,则控件的构造函数将缓存多个属性的默认值(设置默认状态),然后调用PerformLayout();但是,正如您在源代码中所看到的,布局被设置为:
默认布局不考虑RowTemplate的
Height
,因为应用了默认布局。另一方面,当您设定DataSource时,会呼叫OnDataSourceChanged()方法,并依序呼叫InvalidateRowHeights()和RefreshColumnsAndRows(),因此会完整执行配置,包括RowTemplate的预设。
您可以使用不同的方法来解决当前问题:
dataGridView1.Rows[0].Height = dataGridView1.RowTemplate.Height;
的New Row对象。dataGridView1.Rows.Add();
DataGridView1.DataSource = new BindingSource(); dataGridView1.DataSource = null;