将所有数据从xml设置为DataGrid

时间:2014-08-22 16:38:31

标签: c# xml wpf

我正在尝试将XML中的所有数据设置为数据网格。这是我的xaml代码:

<datagrid x:name="dataGrid" horizontalalignment="Left" 
    autogeneratecolumns="False" height="271" 
    margin="10,10,0,0" verticalalignment="Top" width="491">
    IsReadOnly="True">
    <DataGrid.Columns>
        <DataGridTextColumn Header="NAME"
        Binding="{Binding NAME}" />
        <DataGridTextColumn Header="UNIT"
        Binding="{Binding UNIT}" />
        <DataGridTextColumn Header="CURRENCYCODE"
        Binding="{Binding CURRENCYCODE}" />
        <DataGridTextColumn Header="COUNTRY"
        Binding="{Binding COUNTRY}" />
        <DataGridTextColumn Header="RATE"
        Binding="{Binding RATE}" />
        <DataGridTextColumn Header="CHANGE"
        Binding="{Binding CHANGE}" />
    </DataGrid.Columns>
</datagrid>

我尝试使用以下代码将所有数据放入网格中:

private void setData()
{
    var doc = XDocument.Load("https://forex.boi.org.il/currency.xml");
    var data = doc.Root.Elements("CURRENCY");
    List information = new List();

    foreach (var code in data)
    {
        var nameV = code.Element("NAME").Value;
        var unitV = code.Element("UNIT").Value;
        var currencyCodeV = code.Element("CURRENCYCODE").Value;
        var currencyV = code.Element("COUNTRY").Value;
        var rateV = code.Element("RATE").Value;
        var changeV = code.Element("CHANGE").Value;

        Info row = new Info(nameV, unitV, currencyCodeV, currencyV, 
            rateV, changeV);

        information.SetValue(row);

    }
    dataGrid.ItemsSource = information;t unsecsses
}

在这一行information.SetValue(row);中,我尝试将INFO类设置到列表中。我看到有一个选项可以编写将xml转换为LIST的内容,它非常简单但现在可以正常工作。

我试试这个:data.ToList();但我不知道怎么做..帮助..

2 个答案:

答案 0 :(得分:1)

我假设你的类'公共属性绑定匹配(Info类具有绑定语句中提到的所有属性)。然后,您可以尝试使用IEnumerable<Info>List<Info>作为ItemsSource

.....
IEnumerable<Info> information = doc.Root
                                   .Elements("CURRENCY")
                                   .Select(o => new Info
                                             (
                                                (string)o.Element("NAME"),
                                                (string)o.Element("UNIT"),
                                                (string)o.Element("CURRENCYCODE"),
                                                (string)o.Element("COUNTRY"),
                                                (string)o.Element("RATE"),
                                                (string)o.Element("CHANGE")
                                             ));
dataGrid.ItemsSource = information;

答案 1 :(得分:0)

您的SetData方法应如下所示:

private void setData()
{
     var doc = XDocument.Load("https://forex.boi.org.il/currency.xml" );
     IEnumerable<Info> information = doc.Descendants("CURRENCY").Select(x => new Info()
     {
            nameV = x.Element("NAME").Value,
            unitV = x.Element("UNIT").Value,
            //etc...
     });
     dataGrid.ItemsSource = information;
}

在您的尝试中,您遇到以下问题:
它应该是List<Info> information = new List<Info>();information.Add(row);

不要忘记修改您的XAML,以便列的绑定与Info类(nameV类(currencyVBinding="{Binding nameV}"等)中的属性名称相对应,因此您将拥有它像这样:{{1}}