如何在WPF中基于XML填充DataGrid

时间:2016-09-08 20:15:01

标签: c# xml wpf datagrid

我有以下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;
    }

但我不能显示的行为列表,我知道它,因为我说:表[2],这是表[3],但我无法弄清楚如何解决这个问题。此外,我希望行为是一个ComboBox。

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

谢谢

1 个答案:

答案 0 :(得分:0)

试试这个解决方案

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

        }
    }
}