【问题标题】:How to fill up DataGrid based on XML in WPF如何在 WPF 中基于 XML 填充 DataGrid
【发布时间】:2016-09-08 20:15:00
【问题描述】:

我有以下 XML,我想在 WPF 中填写一个 DataGrid

<?xml version="1.0" encoding="UTF-8"?>
<Start>
<General>
<ItemList>
  <Item>
    <name>iustin</name>
    <value>20</value>
    <behaviourList>
      <behaviour>1</behaviour>
      <behaviour>2</behaviour>
      <behaviour>3</behaviour>
      <behaviour>4</behaviour>
    </behaviourList>
  </Item>
  <Item>
    <name>alin</name>
    <value>30</value>
    <behaviourList>
      <behaviour>1</behaviour>
      <behaviour>2</behaviour>
      <behaviour>3</behaviour>
      <behaviour>4</behaviour>
    </behaviourList>
      </Item>
    </ItemList>
  </General>
</Start>

我已经做到了。

public MainWindow()
        {
           InitializeComponent();
           DataSet dataSet = new DataSet();
           dataSet.ReadXml(@"C:\Users\WAVI\documents\visual studio 2015\Projects\DummyProject\DummyProject\XML\TemperatureSensors.xml");

        dataGrid.ItemsSource = dataSet.Tables[2].DefaultView;
    }

但我无法显示行为列表,我知道它,因为我说:Tables[2],这是 Tables[3],但我不知道如何解决这个问题。我也希望行为是一个组合框。

P.S:这只是一个例子,但想法是用一种通用的方式制作它。

谢谢

【问题讨论】:

  • 您可能必须自己解析文件而不使用数据集,xml 正在调用数据集的第一个标签“开始”。然后创建一个表“General”。下一级标签是列名。最后是行数据。您有更多级别的标签导致问题。 ReadXml 开始将数据解析为更多表,这使得处理最终结果变得困难。

标签: c# xml wpf datagrid


【解决方案1】:

试试这个解决方案

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            DataTable dt = new DataTable();
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Value", typeof(int));
            dt.Columns.Add("Behaviour", typeof(int));

            foreach(XElement item in doc.Descendants("Item"))
            {
                string name = (string)item.Element("name");
                int value = (int)item.Element("value");
                foreach (XElement behaviour in item.Descendants("behaviour"))
                {
                    dt.Rows.Add(new object[] { name, value, (int)behaviour });
                }
            }

        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多