簡體   English   中英

以編程方式更改 DataGridView 行上的只讀模式

[英]Programmatically Changing ReadOnly Mode on DataGridView Rows

在不解釋整個上下文的情況下,我的問題基本上是這樣的:

我在綁定到實體框架 DbSet 的 Windows 窗體上有一個 datagridview: dbSet<TEntity>.Local.ToBindingList()

如果我將 datagridview 的ReadOnly屬性設置為 true(在設計視圖中),然后在我的代碼中包含以下語句:

  myDataGridView.Rows[rowIndex].ReadOnly = false;

它直接通過而不改變值! (不,我的數據源不是只讀的。)

循環遍歷行中的單元格並單獨設置每個單元格的 ReadOnly 屬性也不起作用:

  foreach (DataGridViewCell cell in myDataGridView.Rows[rowIndex].Cells)
  {
      cell.ReadOnly = false;
  }

.ReadOnly - Gets or sets a value indicating whether the user can edit the cells of the DataGridView control. 但它表現得好像由於某種原因無法設置

有什么理由會發生這種情況嗎? 我在想也許 datagridview 的ReadOnly屬性會覆蓋對特定行/單元格所做的任何更改(即整個表單必須是只讀的或不是),但顯然對某人有用......

還有其他方法可以實現我的最終目標,但我想知道為什么我不能改變這個屬性,因為這將是我的情況最簡單的解決方案。


編輯:

讓我試着澄清我的問題:

同樣,我知道還有其他方法可以實現我的最終目標,但我想回答這個問題:

對於原始示例很抱歉,但要輕松復制該問題,請創建一個 WinForm 應用程序,在其上拋出一個 datagridview,然后將此代碼傳遞到您的項目中:

 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { dataGridView1.ReadOnly = true; string[] row1 = new string[] { "test", "test1" }; string[] row2 = new string[] { "test2", "test3" }; string[] row3 = new string[] { "test4", "test5" }; dataGridView1.Columns.Add("1", "1"); dataGridView1.Columns.Add("2", "2"); dataGridView1.Rows.Add(row1); dataGridView1.Rows.Add(row2); dataGridView1.Rows.Add(row3); dataGridView1.Rows[1].ReadOnly = false; } }

如果在最后一行放置一個斷點並逐步執行,您將看到 ReadOnly 屬性不會改變! 為什么??

所以我為我的問題找到了解決方案/解決方法,盡管我仍然不確定為什么......

顯然,如果要逐行更改 DataGridView 的 ReadOnly 屬性,則不能設置DataGridView.ReadOnly 屬性,因為這顯然會覆蓋任何后續更改。

要重用我之前的示例,解決方法是遍歷行並設置每個ROW 的ReadOnly 屬性(與設置datagridview 的ReadOnly 屬性相反),然后您可以單獨更改每行的 ReadOnly 屬性:

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

    private void Form1_Load(object sender, EventArgs e)
    {
        //dataGridView1.ReadOnly = true;
        string[] row1 = new string[] { "test", "test1" };
        string[] row2 = new string[] { "test2", "test3" };
        string[] row3 = new string[] { "test4", "test5" };
        dataGridView1.Columns.Add("1", "1");
        dataGridView1.Columns.Add("2", "2");
        dataGridView1.Rows.Add(row1);
        dataGridView1.Rows.Add(row2);
        dataGridView1.Rows.Add(row3);

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            row.ReadOnly = true;
        }

        dataGridView1.Rows[1].ReadOnly = false;
    }
}

這對我來說很有用,但是任何有關為什么我的原始問題中的代碼無法正常工作的見解將不勝感激!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM