无法编辑C#DataGridView中的任何列 - 有人知道为什么吗?

时间:2010-10-23 13:55:51

标签: c# .net winforms datagridview

我正在尝试为DataGridView中的多个列启用编辑。现在,在任何人提出建议之前我应该​​阅读MSDN article: How to: Specify the Edit Mode for the Windows Forms DataGridView Control,我已经有了。

总结(我引用):

  • 基础数据源支持编辑。
  • 启用了DataGridView控件。
  • EditMode属性值不是EditProgrammatically。
  • 单元格,行,列和控件的ReadOnly属性都设置为false。

所有这一切都是简单而常识的。我已确认Enabled = true。我已确认EditModeEditOnKeystrokeOrF2我已确认所有列(一个除外)均为ReadOnly = false

我觉得有趣的是第一行: -

  
    

基础数据源支持编辑。

  

现在,我正在做的是将数据绑定到DGV: -

// Grab all the Foos.
var foos = (from x in MyRepository.Find()
            select new
                      {
                          x.Foo1,
                          x.Foo2,
                          ...
                          x.FooN
                       }).ToList();

// Now lets bind this result to the GridView.
dataGridView2.DataSource = foos;

我认为这是做事的正确方法..

我正在计划的是,当更改单元格并且用户离开单元格时,我正计划抓取刚刚更改的数据(手动计算)然后手动更新数据库。

这是正确的做事方式吗?

2 个答案:

答案 0 :(得分:4)

在这种情况下,基础数据源不支持编辑,因为匿名类型的属性是只读的。根据C#语言规范:

  

匿名类型的成员是从用于创建该类型实例的匿名对象初始化程序推断出的一系列只读属性。

相反,您可能希望为要显示的值定义具有可编辑属性的显示类,并创建该类的实例。

答案 1 :(得分:2)

我有一个未绑定的DGV问题。我通过设置每个ROW的ReadOnly属性来修复它。 DGV和列都不是ReadOnly,但是当我使用集合设置它们时,行可能以某种方式设置为R / O.

所以:

foreach (var r in Lst)
{
   ...
   dgv.Rows[dgv.Rows.Count - 1].ReadOnly = false;
}