Bind a given DataGrid data source to a given XML file

DataGrid could also be bound to a another persisted kind of datasoures, such as XML ressources or something spectial such as RSS feeds. To bind a given DataGrid to a given xml file data source, the following example is provided to illustrate that.

Create a new Silverlight application

datagrid1.gif

Figure 1

First, In the XAML code editor add the following code

<Grid x:Name="LayoutRoot" Background="White">
<data:DataGrid x:Name="myDataGrid"
AutoGenerateColumns="True"
>
</data:DataGrid>
</Grid>

As you can remark, the DataGrid should be named so that it could be refered later in the C# code behind. Now, let consider this xml file as a main data source for our DataGrid.

<?xml version="1.0" encoding="utf-8" ?>
<myFamily>
<
item>
<
FirstName>Bejaoui</FirstName>
<LastName>Habib</LastName>
<Age>66</Age>
<IsMale>true</IsMale>
</item>
<
item>
<
FirstName>Ben Garga</FirstName>
<LastName>Kadija</LastName>
<Age>63</Age>
<IsMale>false</IsMale>
</item>

<item>
<
FirstName>Bejaoui</FirstName>
<LastName>Bechir</LastName>
<Age>30</Age>
<IsMale>true</IsMale>
</item>
<
item>
<
FirstName>Bejaoui</FirstName>
<LastName>Arbia</LastName>
<Age>25</Age>
<IsMale>false</IsMale>
</item>
<
item>
<
FirstName>Bejaoui</FirstName>
<LastName>Rim</LastName>
<Age>20</Age>
<IsMale>false</IsMale>
</item>
</
myFamily>

Second, a class that fits the xml structure should be developed. It could be represented as under

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Age { get; set; }
public string IsMale { get; set; }
}

Third, a reference to the System.Xml.Linq namespace should be added

datagrid2.gif

Figure 2

In the code behind, a DataGrid object should be declared and the under code should be implemented

public partial class Page : UserControl
{
DataGrid oGrid;
public Page()
{
InitializeComponent();
InitializeGrid();
}
public void InitializeGrid()
{
XDocument oDoc = XDocument.Load("File.xml");
var myData = from info in oDoc.Descendants("item")
select new Person
{
FirstName = Convert.ToString(info.Element("FirstName").Value),
LastName = Convert.ToString(info.Element("LastName").Value),
Age = Convert.ToString(info.Element("Age").Value),
IsMale = Convert.ToString(info.Element("IsMale").Value)
};
oGrid = this.FindName("myDataGrid") as DataGrid;
oGrid.ItemsSource = myData;

}
}

This leads to the following result

datagrid3.gif

Figure 3