New to Telerik UI for WinForms? Start a free 30-day trial
Creating Hierarchy Using an XML Data Source
Updated on Sep 16, 2025
| RELATED VIDEOS | |
|---|---|
| RadGridView for WinForms Hierarchy Overview In this video you will learn the various ways you can display hierarchical data in a RadGridView. (Runtime: 12:13) | ![]() |
Please refer to this topic before proceeding to this article.
RadGridView does not support many-to-many relations. Xml files seldom contain such relations but created DataTables may appear to contain ones.
This xml file is used in the examples below:
XML
<?xml version="1.0" encoding="utf-8"?>
<Invoices>
<Invoice>
<InvoiceNumber>456789</InvoiceNumber>
<JobNumber>TTT</JobNumber>
<CreateDate>01/03/2009 12:23:34</CreateDate>
<Parts>
<Part>
<PartNumber>001</PartNumber>
<PartDescription>Part available</PartDescription>
<PartPrice>12.99</PartPrice>
</Part>
<Part>
<PartNumber>002</PartNumber>
<PartDescription>No Part available</PartDescription>
<PartPrice>60.00</PartPrice>
</Part>
<Part>
<PartNumber>003</PartNumber>
<PartDescription>Part available</PartDescription>
<PartPrice>19.99</PartPrice>
</Part>
<Part>
<PartNumber>004</PartNumber>
<PartDescription>No Part available</PartDescription>
<PartPrice>160.00</PartPrice>
</Part>
<Part>
<PartNumber>005</PartNumber>
<PartDescription>Part available</PartDescription>
<PartPrice>122.99</PartPrice>
</Part>
<Part>
<PartNumber>006</PartNumber>
<PartDescription>No Part available</PartDescription>
<PartPrice>640.00</PartPrice>
</Part>
<Part>
<PartNumber>007</PartNumber>
<PartDescription>Part available</PartDescription>
<PartPrice>1342.99</PartPrice>
</Part>
<Part>
<PartNumber>008</PartNumber>
<PartDescription>No Part available</PartDescription>
<PartPrice>660.00</PartPrice>
</Part>
<Part>
<PartNumber>009</PartNumber>
<PartDescription>Part available</PartDescription>
<PartPrice>112.99</PartPrice>
</Part>
<Part>
<PartNumber>010</PartNumber>
<PartDescription>No Part available</PartDescription>
<PartPrice>610.00</PartPrice>
</Part>
</Parts>
</Invoice>
<Invoice>
<InvoiceNumber>0000</InvoiceNumber>
<JobNumber>RRR</JobNumber>
<CreateDate>01/01/2001 11:00:00</CreateDate>
<Parts>
<Part>
<PartNumber>003</PartNumber>
<PartDescription>Part not available</PartDescription>
<PartPrice>42.99</PartPrice>
</Part>
<Part>
<PartNumber>004</PartNumber>
<PartDescription>4 Part available</PartDescription>
<PartPrice>100.00</PartPrice>
</Part>
</Parts>
</Invoice>
</Invoices>
The DataSet created by ReadXml method for the given xml above contains 3 tables which you can avoid easily by skipping the second table and using the first and the third ones only. Note also that Invoice_Id and Parts_Id columns were added automatically to the tables by the ReadXml method:
C#
void CreatingHierarchyUsingXmlDataSource_Load(object sender, EventArgs e)
{
DataSet xmlDataSet = new DataSet();
xmlDataSet.ReadXml("..\\..\\GridView\\HierarchicalGrid\\hierarchicalGridXml.xml");
GridViewTemplate partsTemplate = new GridViewTemplate();
this.radGridView1.MasterTemplate.Templates.Add(partsTemplate);
GridViewRelation relation = new GridViewRelation(this.radGridView1.MasterTemplate);
relation.ChildTemplate = partsTemplate;
relation.RelationName = "Invoices_Parts";
relation.ParentColumnNames.Add("Invoice_Id");
relation.ChildColumnNames.Add("Parts_Id");
radGridView1.Relations.Add(relation);
this.radGridView1.DataSource = xmlDataSet.Tables[0];
partsTemplate.DataSource = xmlDataSet.Tables[2];
this.radGridView1.MasterTemplate.BestFitColumns();
this.radGridView1.MasterTemplate.Templates[0].BestFitColumns();
}
