2015-05-20 33 views
0

我有一個相對簡單的Winforms應用程序,並使用C#。我一直在使用LINQ(system.xml.linq)...我已經成功地將文本框項目(單個項目)保存到我的xml文件中。將列表框項目保存爲使用linq和c的xml文件中的子項目#

我有一個項目列表框,並希望該列表被保存爲xml文件中的子節點。所以我的XML最後的結果將是這個樣子:

<items> 
<centerName>My Center</centerName> 
<poc>Mr. Jones</poc> 
<servicedUnits> 
    <state>Texas</state> 
    <state>Iowa</state> 
    <state>Hawaii</state> 
</servicedUnits> 
</items> 

我有這樣的代碼,我一直用它來寫XML:我敢肯定,我需要把代碼迭代

private void writeFCATSettings() 
    { 
     XDocument doc = new XDocument 
     (
      new XElement 
       ("Items", 
       new XElement("textBoxCenterName", textBoxCenterName.Text), 
       new XElement("textBoxContactFirstName", textBoxContactFirstName.Text), 

       new XElement("servicedUnits", "<listBoxServicedUnits.Items>") 

      ) 
     ); 
     doc.Save(@"Settings.xml"); 
    } 

通過括號之間的列表框。

最後..我發現這個代碼遍歷我的列表...但是如果我只是將它粘貼到空間中...它不起作用。

XElement servicedUnits = new XElement("ServicedUnits"); 
     foreach (var item in listBoxServicedUnits.Items) 
     { 
      servicedUnits.Add(new XElement("unit", item)); 
     } 

     XDocument document = new XDocument(); 
     document.Add(servicedUnits); 

謝謝你的任何想法...

ER

+0

你在'listBoxServicedUnits.Items'中有什麼?字符串? – har07

回答

0

假設你的列表框的項目是字符串,你可以這樣做:

private void writeFCATSettings() 
{ 
    XDocument doc = new XDocument(
     new XElement("Items", 
      new XElement("textBoxCenterName", textBoxCenterName.Text), 
      new XElement("textBoxContactFirstName", textBoxContactFirstName.Text), 
      new XElement("servicedUnits", 
       listBoxServicedUnits 
       .Items 
       .OfType<string>() 
       .Select(item => new XElement("unit", item))))); 
    doc.Save(@"Settings.xml"); 
} 

或者,如果他們不是字符串或他們是混合類型,你可以這樣做:

private void writeFCATSettings() 
{ 
    XDocument doc = new XDocument(
     new XElement("Items", 
      new XElement("textBoxCenterName", textBoxCenterName.Text), 
      new XElement("textBoxContactFirstName", textBoxContactFirstName.Text), 
      new XElement("servicedUnits", 
       listBoxServicedUnits 
       .Items 
       .OfType<Object>() 
       .Select(x => TransformYouObjectToAStringHere) 
       .Select(item => new XElement("unit", item))))); 
    doc.Save(@"Settings.xml"); 
} 
+0

我收到以下錯誤:Error 'System.Windows.Forms.ListBox.ObjectCollection'沒有包含'Select'的定義,也沒有包含接受'System.Windows.Forms'類型的第一個參數的擴展方法'Select' .ListBox.ObjectCollection'可以被找到(你是否缺少使用指令或程序集引用?) – robertsirwin

+0

Oh right,'ItemCollection'只繼承'IEnumerable'而不是'IEnumerable '。我會盡快更新答案。 –

+0

非常感謝您的幫助......我對編碼技能的缺乏表示歉意......但我不確定在您的解決方案中需要發生什麼情況:「TransformYouObjectToAStringHere」... – robertsirwin

相關問題