2011-06-09 15 views
0

嗨,我嘗試使用XLINQ並綁定值到組合框讀取XML文件: -如何使用XLinq讀取XML並將其綁定到組合框?

XDocument xmlDoc = XDocument.Load("abc.xml"); 
var res = from c in xmlDoc.Element("Clients").Descendants("Client") 
      select c; 

cmb1.BindingContext = new BindingContext(); 
cmb1.DataSource = res; 
cmb1.DisplayMember = "Name"; 
cmb1.ValueMember = "ID"; 

我的XML結構是這樣的: -

<Clients> 
    <Client> 
     <ID>-1</ID> 
     <Name>--Select--</Name> 
    </Client> 
    <Client> 
     <ID>1</ID> 
     <Name>A</Name> 
    </Client> 
    <Client> 
     <ID>2</ID> 
     <Name>B</Name> 
    </Client> 
    <Client> 
     <ID>3</ID> 
     <Name>C</Name> 
    </Client> 
    <Client> 
     <ID>4</ID> 
     <Name>D</Name> 
    </Client> 
</Clients> 

但不知何故,我得到的錯誤。普萊斯幫助

錯誤是: -

System.ArgumentException: Complex DataBinding accepts as a data source either an IList or an IListSource. 
    at System.Windows.Forms.ListControl.set_DataSource(Object value) 
+0

什麼錯誤?詳細errormsg與行請。而且我不想把太多時間花在「XMl結構就是這樣的問題」的問題上。 – 2011-06-09 20:00:03

+0

@亨克:謝謝,但聽起來像XML結構是不好的。請推薦我正確的結構,因爲它是多變的。 – User13839404 2011-06-09 20:02:57

+0

@亨克:同時更新我的​​問題(添加錯誤詳情) – User13839404 2011-06-09 20:04:29

回答

1

您當前的查詢將產生IEnumerable<XElement>,不會給你想要的屬性。

// not tested 
    var res = from c in xmlDoc.Element("Clients").Descendants("Client") 
    select new { Name=c.Element("Name").Value, ID = c.Element("ID").Value }; 

    ... 
    cmb1.DataSource = res.ToList(); 

該ID將是一個字符串。

+0

請現在我更加好奇地知道正確的XML格式。 (正如你在上面的評論中提到的) – User13839404 2011-06-09 20:06:33

+0

我使用了你的XML格式。 – 2011-06-09 20:07:29

+0

雅謝謝。它的工作。 :)但你最喜歡的XML格式是什麼? – User13839404 2011-06-09 20:10:04