在不解释整个上下文的情况下,我的问题基本上是这样的:
我在 Windows 窗体上有一个 datagridview,它绑定到实体框架 DbSet:dbSet<TEntity>.Local.ToBindingList()
.
如果我设置 datagridview 的ReadOnly
属性设置为 true (在设计视图中),然后在我的代码中添加以下语句:
myDataGridView.Rows[rowIndex].ReadOnly = false;
它直接执行而不改变值! (不,我的数据源是not只读。)
循环遍历行中的单元格并单独设置每个单元格的 ReadOnly 属性也不起作用:
foreach (DataGridViewCell cell in myDataGridView.Rows[rowIndex].Cells)
{
cell.ReadOnly = false;
}
。只读 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.readonly.aspx - Gets or sets a value indicating whether the user can edit the cells of the DataGridView control.
但它表现得好像不能set因为某些原因。
发生这种情况有什么原因吗?我在想也许 datagridview 的ReadOnly
属性将覆盖对特定行/单元格所做的任何更改(即整体形式必须是只读或不是),但显然this http://social.msdn.microsoft.com/Forums/en/winformsdatacontrols/thread/7471dd6e-aced-4131-875b-ff2c645adbd9为某人工作...
还有其他方法可以实现我的最终目标,但我想知道为什么我不能更改此属性,因为这将是适合我的情况的最简单的解决方案。
EDIT:
让我尝试澄清我的问题:
再次,我知道还有其他方法可以实现我的最终目标,但希望得到这个问题的答案:
对于原始示例感到抱歉,但为了轻松复制该问题,请创建一个 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 属性不会更改!为什么??