2010-02-22 89 views
3

当我使用linq-to-xml查询的结果填充datagridview时,我无法编辑datagridview。我试着将datagridview的readonly属性设置为false,这并没有帮助。我还为cellBeginEdit添加了一个事件处理程序,并在那里放置了一个断点,但它没有被触及。任何想法我做错了什么,或者如果这是不可能的?无法编辑DataGridView填充LINQ查询的结果

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; 

回答

4

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

  1. 创建一个空WindForm项目(VS 2008和.NET 3.5)
  2. 新增一个DataGridView到窗体。
  3. 连接CellBeginEdit和CellEndEdit。
  4. 放在下面的代码在窗体的构造

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事件被解雇时,他们应该是。希望尝试使用上述步骤重现将帮助您找到您面临的问题。

0

由于您使用的是ToList,因此您的DataSource实际上是List<MergeEntry>,所以它来自Linq查询的事实不会改变任何内容。我怀疑列(不是DGV)的ReadOnly属性设置为true ...我没有看到为什么网格不可编辑的其他原因