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

时间:2010-02-22 15:00:32

标签: c# winforms linq datagridview linq-to-xml

当我使用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;

3 个答案:

答案 0 :(得分:4)

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

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

  5. 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允许我们编辑单元格。