There are many cases when you wouldn't want to include the whole dataset and hierarchy in your application. In such cases you cannot use the automatical mode for hierarchical
databinding and you will need to set up the hierarchy in code manually.
Setting the hierarchical grid in bound mode
For setting the hierarchy, you will need the special GridViewRelation class, which defines the related field in parent and child tables. Consider the sample
below:
| [C#] Setting the hierarchical grid in bound mode |
Copy Code |
|
radGridView1.DataSource = nwindDataSet.Suppliers;
GridViewTemplate template = new GridViewTemplate(); template.DataSource = nwindDataSet.Products;
radGridView1.MasterGridViewTemplate.ChildGridViewTemplates.Add(template);
GridViewRelation relation = new GridViewRelation(radGridView1.MasterGridViewTemplate);
relation.ChildTemplate = template;
relation.RelationName = "SuppliersProducts";
relation.ParentColumnNames.Add("SupplierID");
relation.ChildColumnNames.Add("SupplierID");
radGridView1.Relations.Add(relation);
|
| [VB] Setting the hierarchical grid in bound mode |
Copy Code |
|
radGridView1.DataSource = nwindDataSet.Suppliers
Dim template As GridViewTemplate = New GridViewTemplate
template.DataSource = nwindDataSet.Products
radGridView1.MasterGridViewTemplate.ChildGridViewTemplates.Add(template)
Dim relation As GridViewRelation = New
GridViewRelation(radGridView1.MasterGridViewTemplate)
relation.ChildTemplate = template
relation.RelationName = "SuppliersProducts"
relation.ParentColumnNames.Add("SupplierID")
relation.ChildColumnNames.Add("SupplierID")
radGridView1.Relations.Add(relation)
|
You can also set the relation in design-time, using the provided collection editor as in the screenshot below:

Setting the hierarchical grid in unbound mode
Setting the hierarchical grid in unbound mode is quite similar to that for the bound mode with only difference is setting the unbound mode itself. First of all you need to
create and the columns you need. After that set up the relation and finally load the data.
| [C#] Setting the hierarchical grid in unbound mode |
Copy Code |
|
//setup the master template GridViewImageColumn column = new
GridViewImageColumn("Photo");
column.ImageLayout = ImageLayout.Stretch;
radGridView1.MasterGridViewTemplate.Columns.Add(column);
GridViewTextBoxColumn textColumn = new GridViewTextBoxColumn("Name");
textColumn.Width = 150;
radGridView1.MasterGridViewTemplate.Columns.Add(textColumn);
radGridView1.MasterGridViewTemplate.Columns.Add(new GridViewDecimalColumn("Salary"));
GridViewDateTimeColumn dateTimeColumn = new GridViewDateTimeColumn("Hire
Date");
dateTimeColumn.Width = 100;
dateTimeColumn.TextAlignment = ContentAlignment.MiddleCenter;
radGridView1.MasterGridViewTemplate.Columns.Add(dateTimeColumn);
textColumn = new GridViewTextBoxColumn("Title");
textColumn.Width = 150;
radGridView1.MasterGridViewTemplate.Columns.Add(textColumn);
radGridView1.MasterGridViewTemplate.Columns.Add(new GridViewCheckBoxColumn("Active"));
radGridView1.MasterGridViewTemplate.Columns.Add(new GridViewCommandColumn("Action")); //setup the child template GridViewTemplate template = new GridViewTemplate(); template.AllowAddNewRow = true; template.Columns.Add(new GridViewTextBoxColumn("Name")); template.Columns.Add(new GridViewTextBoxColumn("Product Number")); template.Columns.Add(new GridViewDecimalColumn("Quantity")); template.Columns.Add(new GridViewDecimalColumn("Discount")); template.Columns.Add(new GridViewDecimalColumn("Total"));
radGridView1.MasterGridViewTemplate.ChildGridViewTemplates.Add(template); //create the relation GridViewRelation relation = new GridViewRelation(radGridView1.MasterGridViewTemplate);
relation.ChildTemplate = template;
relation.RelationName = "EmployeesOrders";
relation.ParentColumnNames.Add("Name");
relation.ChildColumnNames.Add("Name");
radGridView1.Relations.Add(relation); //load data LoadUnboundData();
private void LoadUnboundData()
{ for (int i = 0; i <
nwindDataSet.Employees.Count; i++)
{
Random random = new Random((int)DateTime.Now.Ticks);
Telerik.Examples.WinControls.DataSources.NorthwindDataSet.EmployeesRow row = nwindDataSet.Employees[i];
string name = row.FirstName + " " +
row.LastName;
radGridView1.MasterGridViewTemplate.Rows.Add(GetImageFromBytes(row.Photo), name, random.Next(45000),
row.HireDate, row.Title, (random.Next(100) > 50), "View");
GridViewTemplate template = radGridView1.MasterGridViewTemplate.ChildGridViewTemplates[0];
int rowCount = random.Next(20);
for (int j = 0; j < rowCount; j++)
{
template.Rows.Add(name, random.Next(1000), random.Next(50), random.Next(100),
random.Next(10000));
}
}
}
|
| [VB] Setting the hierarchical grid in unbound mode |
Copy Code |
|
Dim column As GridViewImageColumn = New
GridViewImageColumn("Photo")
column.ImageLayout = ImageLayout.Stretch
radGridView1.MasterGridViewTemplate.Columns.Add(column)
Dim textColumn As GridViewTextBoxColumn = New
GridViewTextBoxColumn("Name")
textColumn.Width = 150
radGridView1.MasterGridViewTemplate.Columns.Add(textColumn)
radGridView1.MasterGridViewTemplate.Columns.Add(New GridViewDecimalColumn("Salary"))
Dim dateTimeColumn As GridViewDateTimeColumn = New
GridViewDateTimeColumn("Hire Date")
dateTimeColumn.Width = 100
dateTimeColumn.TextAlignment = ContentAlignment.MiddleCenter
radGridView1.MasterGridViewTemplate.Columns.Add(dateTimeColumn)
textColumn = New GridViewTextBoxColumn("Title")
textColumn.Width = 150
radGridView1.MasterGridViewTemplate.Columns.Add(textColumn)
radGridView1.MasterGridViewTemplate.Columns.Add(New GridViewCheckBoxColumn("Active"))
radGridView1.MasterGridViewTemplate.Columns.Add(New GridViewCommandColumn("Action"))
Dim template As GridViewTemplate = New GridViewTemplate
template.AllowAddNewRow = true
template.Columns.Add(New GridViewTextBoxColumn("Name"))
template.Columns.Add(New GridViewTextBoxColumn("Product Number"))
template.Columns.Add(New GridViewDecimalColumn("Quantity"))
template.Columns.Add(New GridViewDecimalColumn("Discount"))
template.Columns.Add(New GridViewDecimalColumn("Total"))
radGridView1.MasterGridViewTemplate.ChildGridViewTemplates.Add(template)
Dim relation As GridViewRelation = New
GridViewRelation(radGridView1.MasterGridViewTemplate)
relation.ChildTemplate = template
relation.RelationName = "EmployeesOrders"
relation.ParentColumnNames.Add("Name")
relation.ChildColumnNames.Add("Name")
radGridView1.Relations.Add(relation)
LoadUnboundData
Private Sub LoadUnboundData()
Dim i As Integer =
0
Do While (i <
nwindDataSet.Employees.Count)
Dim random As Random =
New Random(CType(DateTime.Now.Ticks,Integer))
Dim row As
Telerik.Examples.WinControls.DataSources.NorthwindDataSet.EmployeesRow = nwindDataSet.Employees(i)
Dim name As String = (row.FirstName + (" " + row.LastName))
radGridView1.MasterGridViewTemplate.Rows.Add(GetImageFromBytes(row.Photo), name,
random.Next(45000), row.HireDate, row.Title, (random.Next(100) > 50), "View")
Dim template As
GridViewTemplate = radGridView1.MasterGridViewTemplate.ChildGridViewTemplates(0)
Dim rowCount As
Integer = random.Next(20)
Dim j As Integer = 0
Do While (j <
rowCount)
template.Rows.Add(name, random.Next(1000), random.Next(50), random.Next(100), random.Next(10000))
j = (j + 1)
Loop
i = (i + 1)
Loop
End Sub
|