星期三, 5月 03, 2017

[C#] DataGridView.ReadOnly

透過在設計階段和執行階段變更 DataGridView.ReadOnly 來觀察 DataGridViewColumn.ReadOnly 變化情況

WinForm Layout
  • DataGridView 並新增兩個 DataGridViewTextBoxColumn
    • DataGridView.ReadOnly = false,新增控件 ReadOnly 預設值
    • DataGridViewColumn1.ReadOnly = false,新增控件 ReadOnly 預設值
    • DataGridViewColumn2.ReadOnly = true,新增控件後,故意把 ReadOnly 設為 true
    • 以上三個 ReadOnly 在文章內容中,統稱預設值
  • 兩個 Button

[C#] DataGridView.ReadOnly-5

namespace dgvReadOnly
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        StringBuilder sb = new StringBuilder();
        private void button1_Click(object sender, EventArgs e)
        {
            sb.Clear();
            sb.AppendLine($"DataGridView.ReadOnly:{dataGridView1.ReadOnly}");
            foreach (DataGridViewColumn col in dataGridView1.Columns)
            {
                sb.AppendLine($"DataGridViewColumn.ReadOnly:{col.ReadOnly}");
            }
            MessageBox.Show(sb.ToString());
        }

        bool ReadOnly = true;
        private void button2_Click(object sender, EventArgs e)
        {
            dataGridView1.ReadOnly = ReadOnly;
            ReadOnly = !ReadOnly;
        }
    }
}

執行階段:
  • 圖一:在設計階段建立好的預設值
  • 圖二:透過 Button 變更 DataGridView.ReadOnly = true 後,發現 DataGridViewColumn.ReadOnly 也會全部一起改變為 true
  • 圖三:再次把 DataGridView.ReadOnly = false 之後,發現圖一設計階段 DataGridViewColumn.ReadOnly 預設值已經回不來啦
[C#] DataGridView.ReadOnly-0

設計階段才是想記錄的重點,因為很混亂,Orz

把 DataGridView.ReadOnly 設為 true 後,並不會像執行階段一樣,把 DataGridViewColumn.ReadOnly 也設為 true

[C#] DataGridView.ReadOnly-4

DataGridViewColumn1.ReadOnly 仍維持 false 狀態

[C#] DataGridView.ReadOnly-2

DataGridViewColumn2.ReadOnly 竟然變成 false

[C#] DataGridView.ReadOnly-3

觀察 Designer.cs 的 ReadOnly 狀態
  • DataGridView.ReadOnly = true
  • DataGridViewColumn1.ReadOnly = false
  • DataGridViewColumn2.ReadOnly = true
[C#] DataGridView.ReadOnly-1

DataGridView.ReadOnly 變更後,DataGridViewColumn.ReadOnly 和 Designer.cs,在設計階段彼此之間對應不起來,Orz

結論:就不要管設計階段 DataGridViewColumn.ReadOnly 設定值是甚麼,一律以 DataGridView.ReadOnly 在執行階段設定值為主,並注意一下從 ReadOnly = true 變成 false,DataGridViewColumn.ReadOnly 就通通為 false,並不會是設計階段的預設值喔

沒有留言:

張貼留言