我嘗試控制 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在繪制網格后進行編碼。為什么這個以及如何在設計師級別實作它?
uj5u.com熱心網友回復:
如果您沒有為 DataGridView 設定 DataSource,則 Control 的建構式會快取多個屬性的默認值(設定默認狀態),然后呼叫PerformLayout();但是,正如您在源代碼中看到的那樣,布局設定為:
SetState(States.LayoutDeferred, true);
//[...]
LayoutEngine.ProcessSuspendedLayoutEventArgs(this, args);.
默認布局不考慮 RowTemplate 的Height,因為應用了默認布局。
另一方面,當您設定 DataSource 時,會呼叫OnDataSourceChanged()方法并依次呼叫InvalidateRowHeights()和RefreshColumnsAndRows(),因此布局已完全執行,包括 RowTemplate 的預設。
您有不同的方法來解決當前的問題:
- 將值強制到 DataGridView 的第一行,在這種情況下,它只是 New Row 物件,例如,
dataGridView1.Rows[0].Height = dataGridView1.RowTemplate.Height;如果您有預定義的值應用于 (*) 之后的所有行 - 添加一個新的空資料行,即
dataGridView1.Rows.Add(); - 設定一個空的 DataSource 然后洗掉它,例如,
DataGridView1.DataSource = new BindingSource(); dataGridView1.DataSource = null; - 設定一個實際的資料源
* 自定義繪制時可能會出現一些問題,應設計相關代碼來處理此問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526559.html
標籤:C#表格数据网格视图
