拉一個 DataGridView 並手動產生兩個 DataGridViewTextBoxColumn,基本上 Layout 只是觀察 Designer.cs 用,沒甚麼作用
理論上 WinForm 啟動時,加入 DataGridViewTextBoxColumn 時會觸發 DataGridView.ColumnAdded 事件,所以只要在 ColumnAdded 內紀錄下來就行,想像如下面的 Code
namespace dgvDesigner
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
StringBuilder sb = new StringBuilder();
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.ColumnAdded += DataGridView1_ColumnAdded;
sb.Clear();
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Col1", ReadOnly = false });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Col2", ReadOnly = true });
MessageBox.Show(sb.ToString(),"執行階段新增 DataGridVeiwTextboxColumn");
}
private void DataGridView1_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
{
sb.AppendLine($"Name:{e.Column.Name} - ReadOnly:{e.Column.ReadOnly}");
}
}
}
但事情總是沒有這麼美好,自訂的 DataGridView 控件,一直沒有辦法記錄到 DataGridViewColumn.ReadOnly,利用中斷點才發現,為什麼是 DataGridViewTextColumn 加進 DataGridView.Columns 後才設定 DataGridViewTextColumn 的相關屬性設定,ColumnsAdded 完全派不上用場,Orz嘗試把 DataGridViewColumn 屬性設定,手動搬移到 DataGridView.Columns.AddRange() 前,Columns.Added 就抓的到 ReadOnly,不過當在設計階段有動到 DataGridViewColumn 設定值,又回復到上圖的順序,而且 Designer.cs 還是不要去亂動比較好,>.<
以前看 Designer.cs 都沒有特別感覺,這次剛好注意到這個點,記錄一下



沒有留言:
張貼留言