Hi. I've attached an image of a hierarchical RadGrid 3 levels deep (Category-Subcategory-Standard). I'm having a problem removing the useless expand/collapse button (or arrow) at the Standard (3rd) level. I've used the following recursive function but it only goes 2 layers deep in removing the buttons as you can see in the image. I'm not even sure why there is an expand/collapse button at the 3rd level because it is the innermost detail table. Any advice as to how I could remove ALL expand/collapse buttons in the grid? What am I missing?
Here is my code for creating the grid from the code behind.
rgStandards = new RadGrid { ID = "rgStandards", EnableEmbeddedSkins = false, AutoGenerateColumns = false};
rgStandards.PreRender += rgStandards_PreRender;
StandardsSet.Tables[0].TableName = "categories";
StandardsSet.Tables[1].TableName = "subcategories";
StandardsSet.Tables[2].TableName = "standards";
//Standard Categories
rgStandards.MasterTableView.DataMember = "categories";
rgStandards.MasterTableView.DataKeyNames = new string[] { "category" };
rgStandards.MasterTableView.HierarchyDefaultExpanded = true;
rgStandards.AllowPaging = false;
GridBoundColumn boundColumn;
boundColumn = new GridBoundColumn();
boundColumn.DataField = "category";
boundColumn.HeaderText = "Category";
rgStandards.MasterTableView.Columns.Add(boundColumn);
//Standard Subcategories
GridTableView gtvSubcategories = new GridTableView(rgStandards);
gtvSubcategories.DataMember = "subcategories";
gtvSubcategories.DataKeyNames = new string[] { "subcategory" };
GridRelationFields grfSubcategories = new GridRelationFields();
grfSubcategories.MasterKeyField = "category";
grfSubcategories.DetailKeyField = "category";
gtvSubcategories.ParentTableRelation.Add(grfSubcategories);
boundColumn = new GridBoundColumn();
boundColumn.DataField = "subcategory";
boundColumn.HeaderText = "Subcategory";
gtvSubcategories.Columns.Add(boundColumn);
rgStandards.MasterTableView.DetailTables.Add(gtvSubcategories);
//Standard Details
GridTableView gtvStandards = new GridTableView(rgStandards);
gtvStandards.DataMember = "standards";
gtvStandards.DataKeyNames = new string[] { "standardText" };
GridRelationFields grfStandards = new GridRelationFields();
grfStandards.MasterKeyField = "subcategory";
grfStandards.DetailKeyField = "subcategory";
gtvStandards.ParentTableRelation.Add(grfStandards);
boundColumn = new GridBoundColumn();
boundColumn.DataField = "standardText";
boundColumn.HeaderText = "Standard";
gtvStandards.Columns.Add(boundColumn);
gtvSubcategories.DetailTables.Add(gtvStandards);
gtvSubcategories.HierarchyDefaultExpanded = true;
rgStandards.DataSource = StandardsSet;
rgStandards.DataBind();
And here is my recursive function for removing the expand/collapse buttons:
protected void rgStandards_PreRender(object sender, EventArgs e) {
HideExpandColumnRecursive(rgStandards.MasterTableView);
}
public void HideExpandColumnRecursive(GridTableView tableView) {
GridItem[] nestedViewItems = tableView.GetItems(GridItemType.NestedView);
foreach (GridNestedViewItem nestedViewItem in nestedViewItems) {
foreach (GridTableView nestedView in nestedViewItem.NestedTableViews) {
TableCell cell = nestedView.ParentItem["ExpandColumn"];
cell.Controls[0].Visible = false;
if (nestedView.HasDetailTables) {
HideExpandColumnRecursive(nestedView);
}
}
}
}
Here is my code for creating the grid from the code behind.
rgStandards = new RadGrid { ID = "rgStandards", EnableEmbeddedSkins = false, AutoGenerateColumns = false};
rgStandards.PreRender += rgStandards_PreRender;
StandardsSet.Tables[0].TableName = "categories";
StandardsSet.Tables[1].TableName = "subcategories";
StandardsSet.Tables[2].TableName = "standards";
//Standard Categories
rgStandards.MasterTableView.DataMember = "categories";
rgStandards.MasterTableView.DataKeyNames = new string[] { "category" };
rgStandards.MasterTableView.HierarchyDefaultExpanded = true;
rgStandards.AllowPaging = false;
GridBoundColumn boundColumn;
boundColumn = new GridBoundColumn();
boundColumn.DataField = "category";
boundColumn.HeaderText = "Category";
rgStandards.MasterTableView.Columns.Add(boundColumn);
//Standard Subcategories
GridTableView gtvSubcategories = new GridTableView(rgStandards);
gtvSubcategories.DataMember = "subcategories";
gtvSubcategories.DataKeyNames = new string[] { "subcategory" };
GridRelationFields grfSubcategories = new GridRelationFields();
grfSubcategories.MasterKeyField = "category";
grfSubcategories.DetailKeyField = "category";
gtvSubcategories.ParentTableRelation.Add(grfSubcategories);
boundColumn = new GridBoundColumn();
boundColumn.DataField = "subcategory";
boundColumn.HeaderText = "Subcategory";
gtvSubcategories.Columns.Add(boundColumn);
rgStandards.MasterTableView.DetailTables.Add(gtvSubcategories);
//Standard Details
GridTableView gtvStandards = new GridTableView(rgStandards);
gtvStandards.DataMember = "standards";
gtvStandards.DataKeyNames = new string[] { "standardText" };
GridRelationFields grfStandards = new GridRelationFields();
grfStandards.MasterKeyField = "subcategory";
grfStandards.DetailKeyField = "subcategory";
gtvStandards.ParentTableRelation.Add(grfStandards);
boundColumn = new GridBoundColumn();
boundColumn.DataField = "standardText";
boundColumn.HeaderText = "Standard";
gtvStandards.Columns.Add(boundColumn);
gtvSubcategories.DetailTables.Add(gtvStandards);
gtvSubcategories.HierarchyDefaultExpanded = true;
rgStandards.DataSource = StandardsSet;
rgStandards.DataBind();
And here is my recursive function for removing the expand/collapse buttons:
protected void rgStandards_PreRender(object sender, EventArgs e) {
HideExpandColumnRecursive(rgStandards.MasterTableView);
}
public void HideExpandColumnRecursive(GridTableView tableView) {
GridItem[] nestedViewItems = tableView.GetItems(GridItemType.NestedView);
foreach (GridNestedViewItem nestedViewItem in nestedViewItems) {
foreach (GridTableView nestedView in nestedViewItem.NestedTableViews) {
TableCell cell = nestedView.ParentItem["ExpandColumn"];
cell.Controls[0].Visible = false;
if (nestedView.HasDetailTables) {
HideExpandColumnRecursive(nestedView);
}
}
}
}