Hi,
I have a RadGrid on my page that contains a NestedViewTemplate containing a RadPanelBar. I have my HierarchyLoadMode set to ServerOnDemand. What I would like to do is when the user clicks to expand a row, I want the RadPanelBar to list a set of sub-records of row I am clicking on. I need the RadPanelBar to contain some aspet controls, so I am using the ContentTemplate. What I have done is, in the DetailTableDataBind function, I am querying a database for my subrecords and binding the results to the RadPanelBar for that particular GridDataItem being passed into the function. For each row of my sub-table, I am dynamically creating my ContentTemplate from a class I created based on another post on the Telerik site. Below is the code for this. In additional, in my Page_Load function I am looping through the RadGrid and creating the custom template again. Everything I have done appears to work fine with one exception. When I first open a detail row, the RadPanelBar in that row does not have the collapse/expand ability in the header. If I open up a second row, the first row's collapse/expand then appears and everything looks great. But of course the second row's collapse/expand isn't visible. So I'm always one off from this working without issue :) I've tried using the OnInit function to do what I am doing in the Page_Load, but whenever I do anything with the RadGrid in this function, opening the nestedview causes the entire grid to disappear from the page (almost looks like it lost it's data bindings). I have a hunch that the 'OnDetailTableDataBind' is part of my issue, I am guessing I should be doing what I am doing there somewhere else since technically I don't need to even set the e.DetailTableView.DataSource for this to work. Does anyone have any ideas where I might be off? My two functions are below.
Thanks for any suggestions!
Richard
I have a RadGrid on my page that contains a NestedViewTemplate containing a RadPanelBar. I have my HierarchyLoadMode set to ServerOnDemand. What I would like to do is when the user clicks to expand a row, I want the RadPanelBar to list a set of sub-records of row I am clicking on. I need the RadPanelBar to contain some aspet controls, so I am using the ContentTemplate. What I have done is, in the DetailTableDataBind function, I am querying a database for my subrecords and binding the results to the RadPanelBar for that particular GridDataItem being passed into the function. For each row of my sub-table, I am dynamically creating my ContentTemplate from a class I created based on another post on the Telerik site. Below is the code for this. In additional, in my Page_Load function I am looping through the RadGrid and creating the custom template again. Everything I have done appears to work fine with one exception. When I first open a detail row, the RadPanelBar in that row does not have the collapse/expand ability in the header. If I open up a second row, the first row's collapse/expand then appears and everything looks great. But of course the second row's collapse/expand isn't visible. So I'm always one off from this working without issue :) I've tried using the OnInit function to do what I am doing in the Page_Load, but whenever I do anything with the RadGrid in this function, opening the nestedview causes the entire grid to disappear from the page (almost looks like it lost it's data bindings). I have a hunch that the 'OnDetailTableDataBind' is part of my issue, I am guessing I should be doing what I am doing there somewhere else since technically I don't need to even set the e.DetailTableView.DataSource for this to work. Does anyone have any ideas where I might be off? My two functions are below.
Thanks for any suggestions!
Richard
protected void OnDetailTableDataBind(object sender, GridDetailTableDataBindEventArgs e) { GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem; int customerid = Convert.ToInt32(dataItem.GetDataKeyValue("customerid")); RadPanelBar panelBar = (RadPanelBar)dataItem.ChildItem.FindControl("pbCustomerDetails"); using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalConnectionString"].ConnectionString)) { using (SqlCommand myCommand = new SqlCommand("", conn)) { myCommand.CommandText = "Select DateOfBirth, WorkAddress from CustomerDetail where Active=1 and CustomerID=@CustomerID "; myCommand.Parameters.Add("@CustomerID", SqlDbType.Int).Value = customerid; using (SqlDataAdapter adapter = new SqlDataAdapter(myCommand)) { DataTable table = new DataTable(); conn.Open(); adapter.Fill(table); conn.Close(); panelBar.DataSource = table; panelBar.DataBind(); for (int i = 0; i < panelBar.Items.Count; i++) { panelBar.Items[i].ContentTemplate = new CustomerTemplate(); panelBar.Items[i].ContentTemplate.InstantiateIn(panelBar.Items[i]); panelBar.Items[i].DataBind(); panelBar.Items[i].Expanded = true; } panelBar.DataBind(); e.DetailTableView.DataSource = table; } } } }protected void Page_Load(object sender, EventArgs e) { foreach (GridDataItem item in CustomerGrid.Items) { if (item.Expanded) { RadPanelBar panelBar = (RadPanelBar)item.ChildItem.FindControl("pbCustomerDetails"); for (int i = 0; i < panelBar.Items.Count; i++) { panelBar.Items[i].ContentTemplate = new CustomerTemplate(); panelBar.Items[i].ContentTemplate.InstantiateIn(panelBar.Items[i]); panelBar.Items[i].DataBind(); } panelBar.DataBind(); } } }