【问题标题】:C#: WPF datagrid and xml fileC#:WPF 数据网格和 xml 文件
【发布时间】:2011-03-08 21:27:02
【问题描述】:

如何使用类读取 xml 文件并将其填充到数据网格中?数据网格应该有验证能力?

Xml 文件:

<?xml version='1.0'?>
<Data>
 <Book>
 <Author>John Doe</Author>
 <Title>Straight Track Demo</Title>
 <Version>1</Version>  
 </Book>
</Data>

【问题讨论】:

  • 你试过什么?那里有许多 DataGrid 和 Linq2Xml 示例。你有没有尝试过这个?
  • 我看过一些例子,但在课堂上而不是 xaml 中做这件事让我很困惑。
  • 我想这是一个主要问题;我试图让您告诉我们您已经尝试过什么,以便我们可以向您展示为什么它不起作用。这样更容易学习。
  • 我使用 MainWindow.xaml.cs 中的 xdocument.load、xdocument.descendants 和 this.datagrid1.itemssource 读取它,并使用 msdn.microsoft.com/en-us/library/ee622975.aspx 进行了验证。我还使用了 datagridtemplate 列、datatemplate 和文本框来填充网格。我只是想知道如何使用类读取 xml 文件并进行验证并从代码隐藏中填充所有内容。例如,读取任何 xml 文件的类,以及在 datagrid 上显示文件的方式
  • @user641631 - 请编辑您的原始问题并在此处添加代码示例。

标签: c# wpf xml validation datagrid


【解决方案1】:

有几种方法可以使用 XML 加载 DataGrid(还有其他方法):

  1. 使用XmlDataProvider
  2. 从代码隐藏中读取 XML

这是一个使用这两种方法的非常粗略的示例。

XAML

<Window x:Class="WpfApplication1.MyDataGrid"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MyDataGrid" Height="300" Width="300">
    <Window.Resources>

        <XmlDataProvider x:Key="BookData" 
            Source="C:\Somewhere\Books.xml" XPath="Data"/>

    </Window.Resources>
    <StackPanel>
        <DataGrid 
            ItemsSource="{Binding Path=Elements[Book]}"
            AutoGenerateColumns="False" Height="Auto" 
            Name="dataGrid1" 
            VerticalAlignment="Top" HorizontalAlignment="Stretch">

            <DataGrid.Columns>
                <DataGridTextColumn 
                    Header="Author" 
                    Binding="{Binding Path=Element[Author].Value}"/>
                <DataGridTextColumn 
                    Header="Title" 
                    Binding="{Binding Path=Element[Title].Value}"/>
                <DataGridTextColumn 
                    Header="Version" 
                    Binding="{Binding Path=Element[Version].Value}" />
            </DataGrid.Columns>

        </DataGrid>


        <DataGrid 
            DataContext="{StaticResource BookData}" 
            ItemsSource="{Binding XPath=Book}"
            AutoGenerateColumns="False" Height="Auto" 
            Name="dataGrid2" Margin="0,25,0,0" 
            VerticalAlignment="Top" HorizontalAlignment="Stretch">

            <DataGrid.Columns>
                <DataGridTextColumn 
                    Header="Author" 
                    Binding="{Binding XPath=Author}"/>
                <DataGridTextColumn 
                    Header="Title" 
                    Binding="{Binding XPath=Title}"/>
                <DataGridTextColumn 
                    Header="Version" 
                    Binding="{Binding XPath=Version}" />
            </DataGrid.Columns>

        </DataGrid>

    </StackPanel>
</Window>

代码背后

using System.Windows;
using System.Xml.Linq;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MyDataGrid.xaml
    /// </summary>
    public partial class MyDataGrid : Window
    {
        public MyDataGrid()
        {
            InitializeComponent();

            var xml = XDocument.Load( "c:\\Somewhere\\Books.xml" ).Root;
            dataGrid1.DataContext = xml;
        }

    }
}

供参考

最后,这里有几篇文章:

  1. Binding.XPath Property on MSDN
  2. Customize Data Display with Data Binding and WPF > Using XML Data
  3. A DataGrid sample using XML data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多