Thursday, October 22, 2009
by
Vladimir Enchev
|
I’ve made small example on how to load on demand RadGridView hierarchy child data using MVVM and RIA service:
Using partial classes you can extend very easily generated code with desired load on demand logic:
public partial class Customer
{
bool ordersLoaded = false;
public IEnumerable<Order> CustomerOrders
{
get
{
if (!ordersLoaded)
{
var query = from o in MyDataContext.DomainContext.GetOrdersQuery()
where o.CustomerID == CustomerID
select o;
MyDataContext.DomainContext.Load(query);
ordersLoaded = true;
}
return Orders;
}
}
}
and if you create your own data context you can bind all these completely codeless:
<telerik:RadGridView Name="RadGridView1" IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding Customers}">
<telerik:RadGridView.ChildTableDefinitions>
<telerik:GridViewTableDefinition />
</telerik:RadGridView.ChildTableDefinitions>
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Customer ID" DataMemberBinding="{Binding CustomerID}" />
<telerik:GridViewDataColumn Header="Company Name" DataMemberBinding="{Binding CompanyName}" />
<telerik:GridViewDataColumn Header="Contact Name" DataMemberBinding="{Binding ContactName}" />
<telerik:GridViewDataColumn Header="City" DataMemberBinding="{Binding City}" />
<telerik:GridViewDataColumn Header="Country" DataMemberBinding="{Binding Country}" />
</telerik:RadGridView.Columns>
<telerik:RadGridView.HierarchyChildTemplate>
<DataTemplate>
<telerik:RadGridView IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding CustomerOrders}">
<telerik:RadGridView.ChildTableDefinitions>
<telerik:GridViewTableDefinition />
</telerik:RadGridView.ChildTableDefinitions>
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Order ID" DataMemberBinding="{Binding OrderID}" />
<telerik:GridViewDataColumn Header="Order Date" DataMemberBinding="{Binding OrderDate}" />
</telerik:RadGridView.Columns>
<telerik:RadGridView.HierarchyChildTemplate>
<DataTemplate>
<telerik:RadGridView IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding Details}">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Unit Price" DataMemberBinding="{Binding UnitPrice}" />
<telerik:GridViewDataColumn Header="Quantity" DataMemberBinding="{Binding Quantity}" />
<telerik:GridViewDataColumn Header="Discount" DataMemberBinding="{Binding Discount}" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</DataTemplate>
</telerik:RadGridView.HierarchyChildTemplate>
</telerik:RadGridView>
</DataTemplate>
</telerik:RadGridView.HierarchyChildTemplate>
</telerik:RadGridView>
Enjoy!
[Download]