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>
[Download]
Vladimir Enchev is Director of Engineering, Native Mobile UI & Frameworks