3 Stimmen

C#: WPF Datentabelle und Xml-Datei

Wie kann ich eine XML-Datei mit Hilfe einer Klasse lesen und sie in eine Datentabelle einfügen? Die Datentabelle sollte Validierungsfunktionen haben?

Xml-Datei:

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

4voto

Metro Smurf Punkte 35374

Es gibt mehrere Möglichkeiten, ein DataGrid mit XML zu laden (es gibt auch andere):

  1. Die Verwendung eines XmlDataProvider
  2. Einlesen des XML aus dem Code-Behind

Hier ist ein sehr grobes Beispiel, das beide Methoden verwendet.

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>

Code Hinter

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;
        }

    }
}

Als Referenz

Zum Schluss noch ein paar Artikel:

  1. Binding.XPath-Eigenschaft auf MSDN
  2. Anpassen der Datenanzeige mit Datenbindung und WPF > Verwendung von XML-Daten
  3. Ein DataGrid-Beispiel mit XML-Daten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X