无法编辑填充LINQ查询结果的DataGridView

当我使用linq-to-xml查询的结果来填充datagridview时,我无法编辑datagridview。 我已经尝试将datagridview的readonly属性设置为false,这没有用。 我还为cellBeginEdit添加了一个事件处理程序,并在那里放置一个断点,但它没有被击中。 知道我做错了什么,或者这是不可能的?

public class MergeEntry { public string author { get; set; } public string message { get; set; } } ... var query = from entry in xmlDoc.Descendants("entry") select new MergeEntry { author = entry.Element("author").Value, message = entry.Element("msg").Value, } var queryAsList = query.ToList(); myBindingSource.DataSource = queryAsList; myDataGridView.DataSource = myBindingSource; 

是的,可以绑定到从Linq-To-Xml创建的列表。 我试图重现你的问题。 我做了以下事情:

  1. 创建了一个空的WindForm项目(VS 2008和.Net 3.5)
  2. 向表单添加了DataGridView。
  3. 连接了CellBeginEdit和CellEndEdit。
  4. 在Form的构造函数中放置以下代码

 string testXML = @"

TestAuthor1 TestMsg1

"; XElement xmlDoc = XElement.Parse(testXML); var query = from entry in xmlDoc.Descendants("entry") select new MergeEntry { author = entry.Element("author").Value, message = entry.Element("msg").Value, }; //You were missing the ";" in your post, I am assuming that was a typo. //I first binded to a List, that worked fine. I then changed it to use a BindingList //to support two-way binding. var queryAsList = new BindingList(query.ToList()); bindingSource1.DataSource = queryAsList; dataGridView1.DataSource = bindingSource1;

运行WinForm应用程序时,显示了一个可编辑的网格,CellBeginEdit和CellEndEdit事件应该被触发。 希望尝试使用上述步骤重现将帮助您找到您面临的问题。

由于您正在使用ToList ,因此您的DataSource实际上是List ,因此它来自Linq查询的事实不会改变任何内容。 我怀疑列(而不是DGV)的ReadOnly属性设置为true …我没有看到网格无法编辑的其他原因