2010-02-22 91 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 ...我沒有看到爲什麼網格不可編輯的其他原因