After a little tweaking, this now works for me. Please can you try it.
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
Telerik.WinControls;
using
Telerik.WinControls.UI;
using
Telerik.WinControls.RadControlSpy;
namespace
RadGridView_hierarchy_C
{
public
partial
class
Form1 : Form
{
public
Form1()
{
InitializeComponent();
this
.Load +=
new
System.EventHandler(
this
.Form1_Load);
}
private
void
Form1_Load(
object
sender, EventArgs e)
{
List<Person> People =
new
List<Person>();
List<Car> Cars =
new
List<Car>();
List<CarYear> CarYears =
new
List<CarYear>();
// load primary data source
People.Add(
new
Person(1, 101,
"Bob"
, 204.50M, 1));
People.Add(
new
Person(2, 102,
"Rob"
, 208.00M, 1));
People.Add(
new
Person(3, 103,
"Eric"
, 300.00M, 1));
this
.radGridView1.DataSource = People;
GridViewTemplate carTemplate =
new
GridViewTemplate();
Cars.Add(
new
Car(101, 1,
"Ford"
, 100.50M, 1));
Cars.Add(
new
Car(102, 2,
"BMW"
, 104, 1));
Cars.Add(
new
Car(102, 6,
"BMW"
, 104, 1));
Cars.Add(
new
Car(102, 7,
"BMW"
, 104, 1));
Cars.Add(
new
Car(102, 3,
"Mazda"
, 100, 1));
Cars.Add(
new
Car(102, 8,
"Mazda"
, 100, 1));
Cars.Add(
new
Car(102, 4,
"Merc"
, 100, 1));
Cars.Add(
new
Car(103, 5,
"Honda"
, 100, 1));
carTemplate.DataSource = Cars;
GridViewTemplate carYearTemplate =
new
GridViewTemplate();
CarYears.Add(
new
CarYear(1, 2004,
"Ford"
, 100));
CarYears.Add(
new
CarYear(2, 2000,
"BMW"
, 104));
CarYears.Add(
new
CarYear(2, 2001,
"BMW"
, 104));
CarYears.Add(
new
CarYear(2, 2002,
"BMW"
, 104));
CarYears.Add(
new
CarYear(2, 2003,
"BMW"
, 104));
CarYears.Add(
new
CarYear(2, 2004,
"BMW"
, 104));
CarYears.Add(
new
CarYear(2, 2005,
"BMW"
, 104));
CarYears.Add(
new
CarYear(3, 2004,
"Mazda"
, 100));
CarYears.Add(
new
CarYear(4, 2007,
"Merc"
, 100));
CarYears.Add(
new
CarYear(5, 2010,
"Honda"
, 100));
carYearTemplate.DataSource = CarYears;
// Now create first relation
GridViewRelation carsRelation =
new
GridViewRelation(
this
.radGridView1.MasterTemplate);
carsRelation.ChildTemplate = carTemplate;
carsRelation.RelationName =
"ParentChild"
;
carsRelation.ParentColumnNames.Add(
"ID2"
);
carsRelation.ChildColumnNames.Add(
"ID"
);
this
.radGridView1.Relations.Add(carsRelation);
GridViewRelation carYearsRelation =
new
GridViewRelation(carTemplate, carYearTemplate);
carYearsRelation.RelationName =
"ChildGrandChild"
;
carYearsRelation.ParentColumnNames.Add(
"ID2"
);
carYearsRelation.ChildColumnNames.Add(
"ID"
);
this
.radGridView1.Relations.Add(carYearsRelation);
this
.radGridView1.MasterTemplate.Templates.Add(carTemplate);
this
.radGridView1.MasterTemplate.Templates[0].Templates.Add(carYearTemplate);
this
.radGridView1.MasterTemplate.Templates[0].AllowAddNewRow =
false
;
this
.radGridView1.MasterTemplate.Templates[0].Templates[0].AllowAddNewRow =
false
;
this
.radGridView1.MasterTemplate.Templates[0].Columns[
"ID"
].IsVisible =
false
;
this
.radGridView1.MasterTemplate.Templates[0].Columns[
"ID2"
].IsVisible =
false
;
this
.radGridView1.MasterTemplate.Templates[0].Columns[
"Model"
].Width = 150;
this
.radGridView1.MasterTemplate.Templates[0].Columns[
"Model"
].ReadOnly =
true
;
this
.radGridView1.MasterTemplate.Templates[0].Columns[
"Qty"
].Width = 150;
this
.radGridView1.MasterTemplate.Templates[0].Columns[
"Price"
].Width = 150;
this
.radGridView1.MasterTemplate.Templates[0].Templates[0].Columns[
"ID"
].IsVisible =
false
;
this
.radGridView1.MasterTemplate.Templates[0].Templates[0].Columns[
"Model"
].IsVisible =
false
;
this
.radGridView1.MasterTemplate.Templates[0].Templates[0].Columns[
"Year"
].Width = 150;
this
.radGridView1.MasterTemplate.Templates[0].Templates[0].Columns[
"Year"
].ReadOnly =
true
;
this
.radGridView1.MasterView.ChildRows[1].IsExpanded =
true
;
this
.radGridView1.MasterView.ChildRows[1].ChildRows[0].IsExpanded =
true
;
this
.radGridView1.AutoGenerateColumns =
false
;
this
.radGridView1.AutoSizeRows =
true
;
this
.radGridView1.EnableAlternatingRowColor =
true
;
this
.radGridView1.ReadOnly =
false
;
this
.radGridView1.AutoGenerateHierarchy =
false
;
}
}
public
class
Person
{
public
int
ID {
get
;
set
; }
public
int
ID2 {
get
;
set
; }
public
string
Name {
get
;
set
; }
public
decimal
Price {
get
;
set
; }
public
decimal
Qty {
get
;
set
; }
public
Person(
int
id,
int
id2,
string
name,
decimal
price,
decimal
qty)
{
ID = id;
ID2 = id2;
Name = name;
Price = price;
Qty = qty;
}
}
public
class
Car
{
public
int
ID {
get
;
set
; }
public
int
ID2 {
get
;
set
; }
public
string
Model {
get
;
set
; }
public
int
Qty {
get
;
set
; }
public
decimal
Price {
get
;
set
; }
public
Car(
int
id,
int
id2,
string
model,
decimal
price,
int
qty)
{
ID = id;
ID2 = id2;
Model = model;
Qty = qty;
Price = price;
}
}
public
class
CarYear
{
public
int
ID {
get
;
set
; }
public
string
Model {
get
;
set
; }
public
int
Year {
get
;
set
; }
public
int
Price {
get
;
set
; }
public
CarYear(
int
id,
int
year,
string
model,
int
price)
{
ID = id;
Year = year;
Model = model;
Price = price;
}
}
}