How to Reproduce:
Source XML:
<?xml version="1.0" encoding="utf-8"?>
<grandparent Date="2014-12-17Z" Name="Grandparent" SchemaVersion="1.0" Time="04:27:07Z" xmlns="">
<parent Name="parent1" City="Los Angeles">
<child Name="Child1" Age="5"/>
<child Name="Child2" Age="8"/>
</parent>
<parent Name="parent2" City="Chicago">
<child Name="Child1" Age="11"/>
<child Name="Child2" Age="15"/>
</parent>
</grandparent>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DataSet xmlDataSet = new DataSet();
xmlDataSet.ReadXml(@"..\..\test.xml");
GridViewTemplate parentTemplate = new GridViewTemplate();
this.radGridView1.MasterTemplate.Templates.Add(parentTemplate);
GridViewRelation relation = new GridViewRelation(this.radGridView1.MasterTemplate);
relation.ChildTemplate = parentTemplate;
relation.RelationName = "Grandparent_Parent";
relation.ParentColumnNames.Add("grandparent_Id");
relation.ChildColumnNames.Add("grandparent_Id");
radGridView1.Relations.Add(relation);
this.radGridView1.DataSource = xmlDataSet.Tables[0];
parentTemplate.DataSource = xmlDataSet.Tables[1];
parentTemplate.AllowAddNewRow = false;
GridViewTemplate childTemplate = new GridViewTemplate();
parentTemplate.Templates.Add(childTemplate);
GridViewRelation childRelation = new GridViewRelation(parentTemplate);
childRelation.ChildTemplate = childTemplate;
childRelation.RelationName = "Parent_Child";
childRelation.ParentColumnNames.Add("parent_Id");
childRelation.ChildColumnNames.Add("parent_Id");
radGridView1.Relations.Add(childRelation);
childTemplate.DataSource = xmlDataSet.Tables[2];
}
}
Workaround - set the data sources of the templates last, or use auto generate hierarchy:
this.radGridView1.AutoGenerateHierarchy = true;
DataSet xmlDataSet = new DataSet();
xmlDataSet.ReadXml(@"..\..\test.xml");
this.radGridView1.DataSource = xmlDataSet;
radGridView1.DataMember = "grandparent";
this.radGridView1.AutoGenerateHierarchy = true;