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
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
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
Figure 3