winforms 如何在设计器中设置DataGridView得首行高度

vcirk6k6  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(186)

我尝试在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。为什么要这样做?如何在设计器级别实现?

aemubtdh

aemubtdh1#

如果未将DataSource设置为DataGridView,则控件的构造函数将缓存多个属性的默认值(设置默认状态),然后调用PerformLayout();但是,正如您在源代码中所看到的,布局被设置为:

SetState(States.LayoutDeferred, true); 
//[...] 
LayoutEngine.ProcessSuspendedLayoutEventArgs(this, args);.

默认布局不考虑RowTemplate的Height,因为应用了默认布局。
另一方面,当您设定DataSource时,会呼叫OnDataSourceChanged()方法,并依序呼叫InvalidateRowHeights()和RefreshColumnsAndRows(),因此会完整执行配置,包括RowTemplate的预设。
您可以使用不同的方法来解决当前问题:

  • 如果您有套用至(*)之后所有数据列的预先定义值,则胁迫将值套用至DataGridView的第一个数据列,在本例中,就是使用例如dataGridView1.Rows[0].Height = dataGridView1.RowTemplate.Height;的New Row对象。
  • 添加新的空数据行,即dataGridView1.Rows.Add();
  • 设置一个空数据源,然后将其移除,例如DataGridView1.DataSource = new BindingSource(); dataGridView1.DataSource = null;
  • 设置实际数据源
  • 当自定义绘制到位时可能会有一些问题,应该设计相关的代码来处理这个问题

相关问题