当我使用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;
答案 0 :(得分:4)
是的,可以绑定到从Linq-To-Xml创建的列表。我试图重现你的问题。我做了以下事情:
string testXML =
@"<p><entry>
<author>TestAuthor1</author>
<msg>TestMsg1</msg>
</entry></p>
";
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<MergeEntry>(query.ToList());
bindingSource1.DataSource = queryAsList;
dataGridView1.DataSource = bindingSource1;
当运行WinForm应用程序时,显示了一个可编辑的网格,并且它们应该已经触发了CellBeginEdit和CellEndEdit事件。希望尝试使用上述步骤重现将帮助您找到您面临的问题。
答案 1 :(得分:0)
由于您使用的是ToList
,因此DataSource
实际上是List<MergeEntry>
,因此来自Linq查询的事实不会改变任何内容。我怀疑列(而不是DGV)的ReadOnly
属性设置为true ...我没有看到网格无法编辑的其他原因
答案 2 :(得分:0)
此解决方案可能无效,但对我有用 我将所有数据(来自LINQ)移到了一个新集合中,并将该新集合作为数据源传递给了gridview。 现在,gridview允许我们编辑单元格。