以编程方式更改DataGridView行上的ReadOnly模式

没有解释整个上下文,我的问题基本上是这样的:

我在Windows窗体上有一个datagridview,它绑定到Entity Framework DbSet: dbSet.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属性会覆盖对特定行/单元格所做的任何更改(即整个表单必须是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; } } 

这对我很有用,但是对于为什么原始问题中的代码无法正常工作的任何见解将不胜感激!