2013-03-20 4 views
2

У меня есть следующий пример XML-файла, из которого мне нужно poplutate ListView. Я играю часами, но я не знаю, как это сделать. Я хочу использовать Linq для достижения этого, но мои знания несколько не хватает. Это проект Winforms C#.Заполнение ListView из файла XML

<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> 

У меня есть следующий очень простой код, который успешно заполняет первый столбец ListView с элементом текстом 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

+0

Вы хотите прочитать о проекциях ... –

+0

Это Winforms. Благодарю. – Daedalus

ответ

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

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); 
} 

Я надеюсь, что это будет работать, но еще не проверял ..

Смежные вопросы