延續這篇
[C#] DataGridView.ReadOnly,DataGridView.ReadOnly 從 true 變成 false 之後,全部的 DataGridViewColumn.ReadOnly 都會變成 false,那 Form 一執行時就要記錄 DataGridViewColumn.ReadOnly 的設定,這樣就可以還原 ReadOnly 狀態,沒想到事情沒這麼單純
拉一個 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 都沒有特別感覺,這次剛好注意到這個點,記錄一下