A DataGrid sample using XML data


I love LINQ, so I’m on a mission to use it in as many samples as possible.  This one is pretty trivial but it took me a bit to put together all the pieces of loading up the xml file to getting the binding to recognize the correct attributes.  Finally I stylized the DataGrid a bit by using a HeaderStyle.


A few notes:



  1. You need the WPF Toolkit.  I’m using Visual Studio 2008 SP1.

  2. Add the WPF Toolkit dlls as resources.

  3. Add the xml file as an embedded resource.

Here’s the code:


XAML


<Window x:Class=”DataGridXML.Window1″


    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”


    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”


    xmlns:toolkit=”http://schemas.microsoft.com/wpf/2008/toolkit”


    Title=”Window1″ Height=”300″ Width=”300″>


    <Window.Resources>


        <Style TargetType=”toolkit:DataGridColumnHeader” x:Key=”MyHeaderStyle”>


            <Setter Property=”FontSize” Value=”14″/>


            <Setter Property=”Foreground” Value=”Blue”/>



        </Style>


    </Window.Resources>


    <Grid>


       


        <toolkit:DataGrid Name=”dg1″ ItemsSource=”{Binding}”  >


            <toolkit:DataGrid.Columns>


                <toolkit:DataGridTextColumn Header=”Album Title” Binding=”{Binding Path=Attribute[Title].Value}” HeaderStyle=”{StaticResource MyHeaderStyle}” />


                <toolkit:DataGridTextColumn Header=”Artist” Binding=”{Binding Path=Attribute[Artist].Value}” HeaderStyle=”{StaticResource MyHeaderStyle}”/>


                <toolkit:DataGridTextColumn Header=”Release Date” Binding=”{Binding Path=Attribute[ReleaseDate].Value}” HeaderStyle=”{StaticResource MyHeaderStyle}” />


            </toolkit:DataGrid.Columns>


        </toolkit:DataGrid>


    </Grid>


</Window>


CS (not the whole file, just add to the default Window1.xaml.cs file)


//add using statements for LINQ


using System.Xml;


using System.Xml.Linq;



public Window1()


        {


            InitializeComponent();


 


            //Load XML file and set the DataGrid data context


            XElement mymusic = XElement.Load(“mymusic.xml”);


            dg1.DataContext = mymusic.Elements(“Album”);


           


        }


VB (not the whole file, just add to the default Window1.xaml.vb file)


‘add using statements for LINQ


Imports System.Xml


Imports System.Xml.Linq



Class Window1


    Public Sub New()


 


        ‘ This call is required by the Windows Form Designer.


        InitializeComponent()


 


        ‘ Add any initialization after the InitializeComponent() call.


        ‘Load XML file and set the DataGrid data context


        Dim mymusic As XElement = XElement.Load(“mymusic.xml”)


        dg1.DataContext = mymusic.Elements(“Album”)


 


    End Sub


End Class


XML (called mymusic.xml)


<Music>


  <Album Title=Chris Sells Live Artist=Chris Sells ReleaseDate=2/5/2008 />


  <Album Title=The Road to Redmond Artist=Luka Abrus ReleaseDate=4/3/2008 />


  <Album Title=The Best of Jim Hance Artist=Jim Hance ReleaseDate=6/2/2008 />


</Music>


 


I used the following documentation which you might also find useful for more complex scenarios.



Margaret