无法编辑填充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创建的列表。 我试图重现你的问题。 我做了以下事情:
- 创建了一个空的WindForm项目(VS 2008和.Net 3.5)
- 向表单添加了DataGridView。
- 连接了CellBeginEdit和CellEndEdit。
- 在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 …我没有看到网格无法编辑的其他原因