读取XML并将其导入DataGrid

时间:2013-07-26 08:44:11

标签: wpf xml datagrid

我有一个XML文件,如下所示:

<code>
    <rccontroller>
        <experiment>
            <profile name="Profile 1" scanCycle="1" profileTime="32.76" attenuator="31" archive="" coded="true">
                 <mode name="Mode 1" scanCycle="1" method="DBS" prf="1000" baudWidth="1" baudNo="16" positions="Z" coded="true">
                     <beam name="Beam 1" scanAngle="0" azimuth="0" offset="0" rmin="1" rmax="20" nci="256" nfft="256" nsa="1" nrgb="128" uiName="Z"/>
                 </mode>
            </profile>
        </experiment>
    </rccontroller> 
</code>

我需要将模式和波束导入DataGrid,其中mode是父网格,Beam将是Parent网格的子项。

我在阅读XML中元素的内部标记时遇到了问题。

请指导我如何阅读XML内部元素并将其放在GridView以及如何为网格添加子GridView并为其执行相同操作的方式。

感谢。

1 个答案:

答案 0 :(得分:1)

我从你的xml

创建了一个data.xml文件

在XAML中我添加了一个XMLDataProvider,它读取该文件然后我们可以提前使用

<XmlDataProvider Source="data.xml" x:Key="dataSource" XPath="code/rccontroller/experiment/profile"/>

这里我们说我们对所有个人资料感兴趣

然后在datagrid中我们使用模式和显示模式以及光束名称

<DataGrid x:Name="dgXml" DataContext="{StaticResource dataSource}" ItemsSource="{Binding XPath=mode}" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Header="Mode name" Binding="{Binding XPath=@name}"/>
    <DataGridTextColumn Header="Beam name" Binding="{Binding XPath=beam/@name}"/>                
  </DataGrid.Columns>
</DataGrid>

正如您所看到的,我们将datagrid DataContext绑定到dataSource,它是我们的XMLDataProvider,它的ItemsSource绑定到该datacontext中的Mode的Xpath,然后在column1中是模式的名称,而在第2列中它的波束名称

<强> EDITED

XAML(仅限网格部分)

<Grid>
    <Grid.Resources>
        <XmlDataProvider Source="data.xml" x:Key="dataSource" XPath="code/rccontroller/experiment/profile"/>
    </Grid.Resources>
    <DataGrid x:Name="dgXml" DataContext="{StaticResource dataSource}" ItemsSource="{Binding XPath=mode}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Mode name" Binding="{Binding XPath=@name}"/>
            <DataGridTextColumn Header="Beam name" Binding="{Binding XPath=beam/@name}"/>                
        </DataGrid.Columns>
    </DataGrid>
</Grid>

将xml放入文件中,将其命名为data.xml,将其复制到exe所在的位置