【问题标题】:Populate ListView from XML file从 XML 文件填充 ListView
【发布时间】:2013-03-20 18:41:57
【问题描述】:

我有以下示例 XML 文件,我需要从中填充 ListView。我已经玩了几个小时,但我不知道最好的方法。我想使用 Linq 来实现这一点,但我的知识有些缺乏。这是一个 Winforms c# 项目。

<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 元素文本填充列表视图的第一列,但我需要兄弟元素(技术名称、信息名称、状态和注释)来填充列表视图的其他列。

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

                }

【问题讨论】:

  • 是 ASP.NET 还是 WinForms?
  • 您想了解有关预测的内容...
  • 这是 Winforms。谢谢。
  • 为什么不能使用 XMLDataSource?

标签: c# winforms linq-to-xml


【解决方案1】:

您需要在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);
}

【讨论】:

    【解决方案2】:
     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);
     }
    

    我希望这会起作用,但尚未测试..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2010-11-09
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多