【问题标题】:Reading a XML and import it into a DataGrid读取 XML 并将其导入 DataGrid
【发布时间】:2013-07-26 08:44:11
【问题描述】:

我有一个 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,其中模式将是父网格,梁将是父网格的子网格。

我在读取 XML 中元素的内部标签时遇到问题。

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

谢谢。

【问题讨论】:

  • 你尝试了吗?在 WPF 数据网格中,您可以使用 XPath 绑定到 XML 元素。对于子网格,您可能需要指定 datagridrow 模板并在那里为内部项目执行 XPath 绑定
  • 嘿 Bjoshi,让我们忘记子网格视图和所有内容。我只想检索 Mode 和 Beam 的内部元素的值...
  • 我会将该评论作为代码格式化的答案,然后我们可以从那里开始工作

标签: wpf xml datagrid


【解决方案1】:

我从你的 xml 制作了一个 data.xml 文件

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

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

这里我们说我们对所有配置文件都感兴趣

然后在数据网格中我们使用模式和显示模式和光束名称

<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 列中是梁名称

已编辑

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 所在的位置

【讨论】:

  • 如果您想直接在 DataGrid 中显示 XML,但是如果您想在代码隐藏中解析它并对其进行操作,那么我会说您使用 Linq 查询来解析 XML 并创建您的模型对象像 Mode/Beam/etc 并绑定这些对象以进行演示
  • 我非常感谢您的帮助 Joshi 先生,问题是我无法执行您提供的代码......它给我带来了多个错误......所以我真的希望你提供整个 xaml 代码对我来说都很好......
  • 非常感谢先生,它工作得很好...非常感谢您的帮助...!! :) :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2016-02-25
相关资源
最近更新 更多