Silverlight 4 out of the box does not support DataTable as its desktop counter part, WPF. But third party controls are here for the rescue. In this blog we will look at, what it take to create a simple grid and use Data Table that we love. As you might have guessed it, I am using Component One controls. Component One provides a namespace C1.Silverlight.Data, which have DataTable implementation that we have been using. So now that we know, we can use Data table, lets create a simple Grid and populate the data.
Create a Silverlight application and add grid control in your XAML as follow;
<Grid x:Name="LayoutRoot" Background="White"> <c1:C1FlexGrid ItemsSource="{Binding DataTableWithData, Mode=TwoWay}" IsReadOnly="False" AutoGenerateColumns="True" Name="_flex"/> </Grid>
Nothing new here, my Flex Grid control bound a property in my view model. Before we go and code, we require following references in our project to run
c1.silvelright.dll
c1.Silvelright.data
System.Windows.Data
System.Windows.Controls.Data
Now lets look at the view model code;
private DataTable _dataTableWithData;
publicDataView DataTableWithData
{
get
{
if(_dataTableWithData == null)
LoadData();
return_dataTableWithData.DefaultView;
}
}
_dataTableWithData property is our underlying data source. Which is nothing but DataTable, which is Component One data table type. If you notice we are not really binding data table to the grid control rather, we are binding DataView to the grid control. DataView implements the IEnumerable interface thus make it bindable to grid control. If you were like me trying out and not seeing the data in your grid, probabily your property type is incorrect.
Now lets look at the code which loads data to the data table
private void LoadData() { _dataTableWithData = new DataTable(); _dataTableWithData.Columns.Add("ID"); _dataTableWithData.Columns.Add("Name"); _dataTableWithData.Columns.Add("Age"); for (int i = 0; i < 10; i++) { _dataTableWithData.Rows.Add(i.ToString(), "Name" + i.ToString(), i); } }
There is nothing special here, creating and populating the data table as you would do in any other format. Now lets run and see the result;
That’s about it. To summarize
1. Make sure you use the references I mentioned above in your project.
2. Use Data Table as local variable to hold data but do not bind control to that property.
3. Use DataView type for binding it to the grid.
4. To bind data table to grid, you return ‘DefaultView’ of the data table.
Pingback: Working with Data Tables in C# « Unni's space
I tried it. But unfortunately It’s not working. Please provide a link of working sample project.
Sure, I will get a sample posted and link it here.