星期四, 5月 04, 2017

[C#] DataGridView 控件屬性設定

延續這篇 [C#] DataGridView.ReadOnly,DataGridView.ReadOnly 從 true 變成 false 之後,全部的 DataGridViewColumn.ReadOnly 都會變成 false,那 Form 一執行時就要記錄 DataGridViewColumn.ReadOnly 的設定,這樣就可以還原 ReadOnly 狀態,沒想到事情沒這麼單純

拉一個 DataGridView 並手動產生兩個 DataGridViewTextBoxColumn,基本上 Layout 只是觀察 Designer.cs 用,沒甚麼作用

[C#] DataGridView 控件屬性設定-1

理論上 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}");
        }
   }
}
[C#] DataGridView 控件屬性設定-2

但事情總是沒有這麼美好,自訂的 DataGridView 控件,一直沒有辦法記錄到 DataGridViewColumn.ReadOnly,利用中斷點才發現,為什麼是 DataGridViewTextColumn 加進 DataGridView.Columns 後才設定 DataGridViewTextColumn 的相關屬性設定,ColumnsAdded 完全派不上用場,Orz

[C#] DataGridView 控件屬性設定-3

嘗試把 DataGridViewColumn 屬性設定,手動搬移到 DataGridView.Columns.AddRange() 前,Columns.Added 就抓的到 ReadOnly,不過當在設計階段有動到 DataGridViewColumn 設定值,又回復到上圖的順序,而且 Designer.cs 還是不要去亂動比較好,>.<

以前看 Designer.cs 都沒有特別感覺,這次剛好注意到這個點,記錄一下

沒有留言:

張貼留言