Linq Datagrid从xml文件绑定 [英] Linq Datagrid binding from xml file

查看:115
本文介绍了Linq Datagrid从xml文件绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个在我有一个datagrid的wpf中的应用程序。我想要从xml动态添加datagrid的列。

 < Department Name ='D1'TotalCapacity ='5' > 
< Class Name ='c1'Capacity ='3'>< / Class>
< Class Name ='c2'Capacity ='2'>< / Class>
< / Department>

< Department Name ='D2'TotalCapacity ='10'>
< Class Name ='c1'Capacity ='5'>< / Class>
< Class Name ='c3'Capacity ='5'>< / Class>
< / Department>

现在,根据这个xml,我希望数据网格显示为:



部门名称 TotalCapacity c1 c2 c3 / p>

  D1 5 3 2  -  

D2 10 5 - 5


解决方案

我很好奇,没有做过你以前想做的,所以我想到我会给它一个刺关于此主题的此MSDN文章,我想出了这个:

 < Grid> 
< Grid.Resources>
< XmlDataProvider x:Key =DepartmentDataXPath =部门/部门>
< x:XData>
< Departments xmlns =>
< Department Name ='D1'TotalCapacity ='5'>
< Class Name ='c1'Capacity ='3'/>
< Class Name ='c2'Capacity ='2'/>
< / Department>
< Department Name ='D2'TotalCapacity ='10'>
< Class Name ='c1'Capacity ='5'/>
< Class Name ='c3'Capacity ='5'/>
< / Department>
< / Departments>
< / x:XData>
< / XmlDataProvider>
< /Grid.Resources>
< DataGrid ItemsSource ={Binding Source = {StaticResource DepartmentData}}AutoGenerateColumns =False>
< DataGrid.Columns>
< DataGridTextColumn Header =部门名称Binding ={Binding XPath = @ Name}/>
< DataGridTextColumn Header =Total CapacityBinding ={Binding XPath = @ TotalCapacity}/>
< DataGridTextColumn标题=c1>
< DataGridTextColumn.Binding>
< Binding XPath =Class [@ Name ='c1'] / @ Capacity/>
< /DataGridTextColumn.Binding>
< / DataGridTextColumn>
< DataGridTextColumn标题=c2>
< DataGridTextColumn.Binding>
< Binding XPath =Class [@ Name ='c2'] / @ Capacity/>
< /DataGridTextColumn.Binding>
< / DataGridTextColumn>
< DataGridTextColumn Header =c3>
< DataGridTextColumn.Binding>
< Binding XPath =Class [@ Name ='c3'] / @ Capacity/>
< /DataGridTextColumn.Binding>
< / DataGridTextColumn>
< /DataGrid.Columns>
< / DataGrid>
< / Grid>

结果:





祝你好运!



编辑:



我刚刚意识到您要求列动态添加 - 我不知道有一个简单的方法来做,因为您的XML不是以格式显示在格式的表格(我必须使用一些XPath魔术将XML转换为平面格式)结构化。希望这会让你走上正确的道路。


I am developing an application in wpf in which i have one datagrid. i want the columns of datagrid to be added dynamically from xml.

<Department Name='D1' TotalCapacity='5'>
  <Class Name='c1' Capacity='3'></Class>
  <Class Name='c2' Capacity='2'></Class>
</Department>

<Department Name='D2' TotalCapacity='10'>
  <Class Name='c1' Capacity='5'></Class>
  <Class Name='c3' Capacity='5'></Class>
</Department>

Now, based on this xml i want the datagrid to be displayed as :

DepartmentName TotalCapacity c1 c2 c3

 D1                  5      3 2  -  

 D2                 10      5 -  5

解决方案

I was curious, and haven't done what you're trying to do before, so I figured I'd give it a stab. Going through this this MSDN article on the subject, I came up with this:

<Grid>
    <Grid.Resources>
        <XmlDataProvider x:Key="DepartmentData" XPath="Departments/Department">
            <x:XData>
                <Departments xmlns="">
                    <Department Name='D1' TotalCapacity='5'>
                        <Class Name='c1' Capacity='3'/>
                        <Class Name='c2' Capacity='2'/>
                    </Department>
                    <Department Name='D2' TotalCapacity='10'>
                        <Class Name='c1' Capacity='5'/>
                        <Class Name='c3' Capacity='5'/>
                    </Department>
                </Departments>
            </x:XData>
        </XmlDataProvider>
    </Grid.Resources>
    <DataGrid ItemsSource="{Binding Source={StaticResource DepartmentData}}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Department Name" Binding="{Binding XPath=@Name}"/>
            <DataGridTextColumn Header="Total Capacity" Binding="{Binding XPath=@TotalCapacity}"/>
            <DataGridTextColumn Header="c1">
                <DataGridTextColumn.Binding>
                    <Binding XPath="Class[@Name='c1']/@Capacity"/>
                </DataGridTextColumn.Binding>
            </DataGridTextColumn>
            <DataGridTextColumn Header="c2">
                <DataGridTextColumn.Binding>
                    <Binding XPath="Class[@Name='c2']/@Capacity"/>
                </DataGridTextColumn.Binding>
            </DataGridTextColumn>
            <DataGridTextColumn Header="c3">
                <DataGridTextColumn.Binding>
                    <Binding XPath="Class[@Name='c3']/@Capacity"/>
                </DataGridTextColumn.Binding>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

The result:

Good luck!

Edit:

I just realized you asked for the columns to be dynamically added - I'm not sure there's a straightforward way to do that, seeing as your XML isn't structured in a format that lends itself to tabular display out of the box (I had to use some XPath magic to transform your XML to a flat format). Hopefully this will get you on the right path though.

这篇关于Linq Datagrid从xml文件绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆