2013-03-20 173 views
2

我有以下示例XML文件,我需要從中彈出一個ListView。我一直在玩幾個小時,但我不知道最好的辦法。我想用Linq來實現這一點,但我的知識有些欠缺。它是一個Winforms c#項目。從XML文件填充ListView

<DMs> 
    <dataModule> 
    <DMC>11111</DMC> 
    <techName>Test Techname 1</techName> 
    <infoName>info 1</infoName> 
    <status>complete</status> 
    <notes>Note 1</notes> 
    </dataModule> 
    <dataModule> 
    <DMC>22222</DMC> 
    <techName>Test Techname 2</techName> 
    <infoName>info 2</infoName> 
    <status>in work</status> 
    <notes>Note 2</notes> 
    </dataModule> 
    <dataModule> 
    <DMC>33333</DMC> 
    <techName>Test Techname 3</techName> 
    <infoName>info 3</infoName> 
    <status>QA required</status> 
    <notes>Note 3</notes> 
    </dataModule> 
    </DMs> 

我有成功的填充與DMC元素文本列表視圖的第一列下面的非常基本的代碼,但我需要的兄弟元素(techName,infoname,狀態和註釋)來填充的其他列列表視圖。

XDocument doc = XDocument.Load(CSDBpath + projectName + "\\Data.xml"); 
      var DMCs = from item in doc.Descendants("dataModule") 
         select item.Element("DMC").Value; 

       foreach (var dmc in DMCs) 
       { 
        ListViewItem item = new ListViewItem(dmc); 
        listView1.Items.Add(item); 

       } 
+0

它是ASP.NET還是WinForms? – MarcinJuraszek 2013-03-20 10:22:53

+0

你想閱讀關於預測... – 2013-03-20 10:23:24

+0

它的Winforms。謝謝。 – Daedalus 2013-03-20 10:25:00

回答

4

你需要適當添加列ListView,並且填補了子項目每個項目:

// Add required columns 
listView1.Columns.Add("DMC"); 
listView1.Columns.Add("Tech Name"); 
listView1.Columns.Add("Info Name"); 
listView1.Columns.Add("Status"); 
listView1.Columns.Add("Notes"); 

XDocument doc = XDocument.Load(CSDBpath + projectName + "\\Data.xml"); 

foreach (var dm in doc.Descendants("dataModule")) 
{ 
    ListViewItem item = new ListViewItem(new string[] 
    { 
     dm.Element("DMC").Value, 
     dm.Element("techName").Value, 
     dm.Element("infoName").Value, 
     dm.Element("status").Value, 
     dm.Element("notes").Value 
    }); 
    listView1.Items.Add(item); 
} 
+0

@ MD.Unicorn - 非常感謝你。完善! – Daedalus 2013-03-20 10:42:21

0
XDocument doc = XDocument.Load(CSDBpath + projectName + "\\Data.xml"); 
var DMCs = from item in doc.Descendants("dataModule") 
      select new { 
         dmc: item.Element("techName").Value, 
         techName: item.Element("DMC").Value, 
         infoName: item.Element("infoName").Value, 
         status: item.Element("status").Value, 
         notes: item.Element("notes").Value, 

         }; 

ListViewItem item = null; 
foreach (var dmc in DMCs) 
{ 
    item = new ListViewItem(dmc); 
    listView1.Items.Add(item); 
} 

我希望這會工作,但還沒有測試..