I am trying to bind a hierachical gridview using entity framework 4.0. (tables: Countries with Districts)
Whenever i try to add a child table definition to the main gridview the ability to sort the child gridview is lost ( when setting the property relation):
d.Relation = new Telerik.Windows.Data.PropertyRelation("Districts");
If i manually add the datasource then sorting works perfectly. Is this the normal behaviour ? Am i doing something wrong?
GridViewTableDefinition d = new GridViewTableDefinition();
d.DataSource = new SofERPEntities().Districts.Where(z=>z.CountryId==5).ToList(); => sorting in child gridview works
//d.Relation = new Telerik.Windows.Data.PropertyRelation("Districts"); => sorting in child gridview not working
this.radGridView1.ChildTableDefinitions.Add(d);
7 Answers, 1 is accepted
I have prepared a sample project in order to test the problem that you are facing.
I have created three RadGridViews with different definition of the hierarchy:
1. The child table definition is added in code behind (as in your case).
2. The child table definition is added in the XAML:
<
telerik:RadGridView.ChildTableDefinitions
>
<
telerik:GridViewTableDefinition
>
<
telerik:GridViewTableDefinition.Relation
>
<
telerik:PropertyRelation
ParentPropertyName
=
"Players"
/>
</
telerik:GridViewTableDefinition.Relation
>
</
telerik:GridViewTableDefinition
>
</
telerik:RadGridView.ChildTableDefinitions
>
3. A RowDetailsTemplate is used:
<
telerik:RadGridView
Grid.Row
=
"2"
Name
=
"clubsGridRowDetails"
ItemsSource
=
"{Binding Clubs}"
RowDetailsTemplate
=
"{StaticResource RowDetailsTemplate}"
>
In the three cases the sorting works fine.
May you please review the sample project and share what the difference in your project is?
Regards,
Didie
the Telerik team
Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

public static ObservableCollection<Country> GetCountries()
{
MyEntities entities = new MyEntities ();
return new ObservableCollection<Country>(entities.Country);
}
where "Country" is an EF generated class and i did the following to load the grid:
this.clubsGrid.ItemsSource = Club.GetCountries();
this.clubsGrid.TableDefinition.ChildTableDefinitions.Add(
new GridViewTableDefinition
{
Relation = new PropertyRelation("District")
});
Even though countries and districts are loaded in the grid, i can only sort the countries table and not the child table (districts).
A have tested the same project with Entity Framework object and still the Hierarchy is working fine.
I have used this code:
clubsGrid.ItemsSource =
new
ClubsEntities3().Clubs;
this
.clubsGrid.TableDefinition.ChildTableDefinitions.Add(
new
GridViewTableDefinition
{
Relation =
new
PropertyRelation(
"Players"
)
});
The Players table(PlayerId, Name, ClubId) has a ClubId foreign key constraint to the Clubs table(ClubId, Name).
Are you using this approach? How do your tables differ from these ones?
Greetings,
Didie
the Telerik team
Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

I am attaching a sample project. You may just need to change the connection string to connect to your Database appropriately.
Kind regards,
Didie
the Telerik team
Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!
Indeed you are right that the sorting of the child grid is not working. I apologize for this misunderstanding.
We are going to further investigate this and inform you when we have figured out why this happens.
Didie
the Telerik team
Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!
I am updating this forum thread, as we have already answered you in the support ticket.
Child sorting does not work because the Entity Framework returns child properties like Club.Players as a special type which inherits from ICollectionView and has its CanSort property set to false. Whenever RadGridView is bound to a collection of type ICollectionView, the grid respects the CanSort property - if this property is set to false, as the case is, the grid will not be able to sort.
If you try the same scenario with Microsoft's DataGrid you will get the same behavior.
Luckily there are various workarounds that you could employ. For example you can try the following modifications to MainWindow.xaml and MainWindow.xaml.cs:
<
Window
x:Class
=
"RadGridView_WPF_AR_11.MainWindow"
xmlns:my
=
"clr-namespace:RadGridView_WPF_AR_11.SampleData"
Title
=
"MainWindow"
Height
=
"700"
Width
=
"700"
>
<
Window.Resources
>
<
my:MyViewModel
x:Key
=
"MyViewModel"
/>
</
Window.Resources
>
<
Grid
>
<
telerik:RadGridView
Grid.Row
=
"0"
Name
=
"clubsGrid"
AutoGenerateColumns
=
"True"
Margin
=
"5"
>
<
telerik:RadGridView.Columns
>
<
telerik:GridViewToggleRowDetailsColumn
/>
</
telerik:RadGridView.Columns
>
<
telerik:RadGridView.RowDetailsTemplate
>
<
DataTemplate
>
<
telerik:RadGridView
Name
=
"playersGrid"
Loaded
=
"playersGrid_Loaded"
AutoGenerateColumns
=
"True"
>
</
telerik:RadGridView
>
</
DataTemplate
>
</
telerik:RadGridView.RowDetailsTemplate
>
</
telerik:RadGridView
>
</
Grid
>
</
Window
>
using
System.Linq;
using
System.Windows;
using
Telerik.Windows.Controls.GridView;
namespace
RadGridView_WPF_AR_11
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public
partial
class
MainWindow : Window
{
ClubsEntities3 entities;
public
MainWindow()
{
InitializeComponent();
this
.entities =
new
ClubsEntities3();
clubsGrid.ItemsSource =
this
.entities.Clubs;
}
private
void
playersGrid_Loaded(
object
sender, RoutedEventArgs e)
{
var dataGrid = sender
as
GridViewDataControl;
var club = dataGrid.DataContext
as
Club;
var players =
this
.entities.Players.Where(p => p.ClubId == club.ClubId);
dataGrid.ItemsSource = players;
}
}
}
Didie
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>