Binding to the DataView of a DataTable
This article will demonstrate how to bind a RadGridView to the DataView of a DataTable. An important thing when using a DataTable as a data source for a RadGridView is to make sure that the ItemsSource property of the control is bound to the DefaultView property of the DataTable, which is of type DataView.
Binding to DataTable's DefaultView
Example 1 demonstrates how you can set up a ViewModel containing a DataTable in order to bind it to the RadGridView.
Example 1: Setting up the ViewModel
public class MyViewModel : ViewModelBase
{
private DataTable datatable;
public DataTable DataTable
{
get
{
if (this.datatable == null)
{
this.datatable = this.CreateDataTable();
}
return this.datatable;
}
}
private DataTable CreateDataTable()
{
var dataTable = new DataTable();
dataTable.Columns.Add(new System.Data.DataColumn("FirstName", typeof(string)));
dataTable.Columns.Add(new System.Data.DataColumn("LastName", typeof(string)));
dataTable.Columns.Add(new System.Data.DataColumn("City", typeof(string)));
for (int i = 1; i <= 50; i++)
{
var row = dataTable.NewRow();
row["FirstName"] = "FirstName " + i;
row["LastName"] = "LastName" + i;
row["City"] = "City " + i;
dataTable.Rows.Add(row);
}
return dataTable;
}
}
Public Class MyViewModel
Inherits ViewModelBase
Private _datatable As DataTable
Public ReadOnly Property DataTable() As DataTable
Get
If Me._datatable Is Nothing Then
Me._datatable = Me.CreateDataTable()
End If
Return Me._datatable
End Get
End Property
Private Function CreateDataTable() As DataTable
Dim _datatable = New DataTable()
_datatable.Columns.Add(New System.Data.DataColumn("FirstName", GetType(String)))
_datatable.Columns.Add(New System.Data.DataColumn("LastName", GetType(String)))
_datatable.Columns.Add(New System.Data.DataColumn("City", GetType(String)))
For i As Integer = 1 To 50
Dim row = _datatable.NewRow()
row("FirstName") = "FirstName " & i
row("LastName") = "LastName" & i
row("City") = "City " & i
_datatable.Rows.Add(row)
Next i
Return _datatable
End Function
End Class
Example 2 demonstrates how the RadGridView is set up in XAML. Please, pay attention to the fact that the ItemsSource is bound to the DefaultView property of the DataTable.
Example 2: Setting up the RadGridView
<Grid>
<Grid.DataContext>
<!-- The namespace "my" refers to the namespace where the MyViewModel class is defined-->
<my:MyViewModel />
</Grid.DataContext>
<telerik:RadGridView ItemsSource="{Binding DataTable.DefaultView}"
AutoGenerateColumns="False"
GroupRenderMode="Flat"
Margin="5">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding FirstName}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding LastName}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding City}" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</Grid>