不解释整个背景,我的问题基本上是这样的:
我在Windows窗体上有一个datagridview,它绑定到一个Entity Framework DbSet: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 - 获取或设置一个值,指示用户是否可以编辑DataGridView控件的单元格。
但它好像由于某些原因无法设置。
这可能是什么原因呢?我认为可能是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属性没有改变!为什么?
DbContext
的EF...如果我没有表述清楚,对不起...我认为EF与我的问题无关,我只是想提供一些背景资料...或者也许它确实有关系?此外,我不太确定你所说的“默认情况下DataGridView列属性设置为false”是什么意思? - sǝɯɐſDataGridView Column
的readonly=false
。无论如何,关于你的问题,你能分享一下你是如何使用这个的吗?是用dbSet<TEntity>.Local.ToBindingList()
还是整个代码? - spajce