Hi all,
I have a hierarchical radgrid. I have problem like, on postback the hierarchy expand state is vanished. When a button outside the grid is clicked, the expanded row will be collapsed, I need it expanded even after the button click.
Please help.
Thanks in advance
I have a hierarchical radgrid. I have problem like, on postback the hierarchy expand state is vanished. When a button outside the grid is clicked, the expanded row will be collapsed, I need it expanded even after the button click.
Please help.
Thanks in advance
3 Answers, 1 is accepted
0
Accepted
Shinu
Top achievements
Rank 2
answered on 05 Jun 2012, 06:33 AM
Hi,
Please take a look into the following code snippet i tried to retain the expanded state of the Hierarchical RadGrid
ASPX:
C#:
Please check this code library for further information.
Thanks,
Shinu.
Please take a look into the following code snippet i tried to retain the expanded state of the Hierarchical RadGrid
ASPX:
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadGrid1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings></telerik:RadAjaxManager><telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Height="75px"/></telerik:RadAjaxLoadingPanel><telerik:RadGrid ID="RadGrid1" DataSourceID="SqlDataSource1" runat="server"AutoGenerateColumns="False" OnDataBound="RadGrid1_DataBound" OnItemCommand="RadGrid1_ItemCommand"> <MasterTableView DataSourceID="SqlDataSource1" DataKeyNames="CustomerID"CommandItemDisplay="Top"> <DetailTables> <telerik:GridTableView DataKeyNames="OrderID" DataSourceID="SqlDataSource2" runat="server" CommandItemDisplay="Top"> <ParentTableRelation> <telerik:GridRelationFields DetailKeyField="CustomerID" MasterKeyField="CustomerID" /> </ParentTableRelation> <DetailTables> <telerik:GridTableView DataKeyNames="OrderID" DataSourceID="SqlDataSource3" runat="server"> <ParentTableRelation> <telerik:GridRelationFields DetailKeyField="OrderID" MasterKeyField="OrderID" /> </ParentTableRelation> <Columns> <telerik:GridBoundColumn SortExpression="UnitPrice" HeaderText="Unit Price" HeaderButtonType="TextButton" DataField="UnitPrice" UniqueName="UnitPrice"> </telerik:GridBoundColumn> <telerik:GridBoundColumn SortExpression="Quantity" HeaderText="Quantity" HeaderButtonType="TextButton" DataField="Quantity" UniqueName="Quantity"> </telerik:GridBoundColumn> <telerik:GridBoundColumn SortExpression="Discount" HeaderText="Discount" HeaderButtonType="TextButton" DataField="Discount" UniqueName="Discount"> </telerik:GridBoundColumn> <telerik:GridButtonColumn UniqueName="OrderDetailsSelectColumn" CommandName="Select" Text="Select" /> <telerik:GridButtonColumn UniqueName="OrderDetailsDeselectColumn" CommandName="Deselect" Text="Deselect" /> </Columns> </telerik:GridTableView> </DetailTables> <Columns> <telerik:GridBoundColumn SortExpression="OrderID" HeaderText="OrderID" HeaderButtonType="TextButton" DataField="OrderID" UniqueName="OrderID"> </telerik:GridBoundColumn> <telerik:GridBoundColumn SortExpression="OrderDate" HeaderText="Date Ordered" HeaderButtonType="TextButton" DataField="OrderDate" UniqueName="OrderDate"> </telerik:GridBoundColumn> <telerik:GridBoundColumn SortExpression="EmployeeID" HeaderText="EmployeeID" HeaderButtonType="TextButton" DataField="EmployeeID" UniqueName="EmployeeID"> </telerik:GridBoundColumn> <telerik:GridButtonColumn UniqueName="OrdersSelectColumn" CommandName="Select" Text="Select" /> <telerik:GridButtonColumn UniqueName="OrdersDeselectColumn" CommandName="Deselect" Text="Deselect" /> </Columns> </telerik:GridTableView> </DetailTables> <Columns> <telerik:GridBoundColumn SortExpression="CustomerID" HeaderText="CustomerID" HeaderButtonType="TextButton" DataField="CustomerID" UniqueName="CustomerID"> </telerik:GridBoundColumn> <telerik:GridBoundColumn SortExpression="ContactName" HeaderText="Contact Name" HeaderButtonType="TextButton" DataField="ContactName" UniqueName="ContactName"> </telerik:GridBoundColumn> <telerik:GridBoundColumn SortExpression="CompanyName" HeaderText="Company" HeaderButtonType="TextButton" DataField="CompanyName" UniqueName="CompanyName"> </telerik:GridBoundColumn> <telerik:GridButtonColumn UniqueName="CustomersSelectColumn" CommandName="Select" Text="Select" /> <telerik:GridButtonColumn UniqueName="CustomersSelectColumn" CommandName="Deselect" Text="Deselect" /> </Columns> </MasterTableView></telerik:RadGrid><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString3 %>"SelectCommand="SELECT * from [Customers]" ></asp:SqlDataSource><asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString3 %>"SelectCommand="SELECT Top 10 * from [Orders]" > <SelectParameters> <asp:SessionParameter Name="CustomerID" SessionField="CustomerID" Type="string" /> </SelectParameters></asp:SqlDataSource> <asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString3 %>"SelectCommand="SELECT Top 10 * FROM [Order Details] where OrderID = @OrderID" > <SelectParameters> <asp:SessionParameter Name="OrderID" SessionField="OrderID" Type="Int32" /> </SelectParameters></asp:SqlDataSource><asp:Button ID="grdRebind" runat="server" Text="Rebind grid" OnClick="grdRebind_Click" />C#:
private Hashtable _ordersExpandedState;private Hashtable _selectedState;public void Page_Load(object sender, EventArgs e){ if (!IsPostBack) { //reset expanded states this._ordersExpandedState = null; this.Session["_ordersExpandedState"] = null; }}//Save/load expanded states Hash from the session//this can also be implemented in the ViewStateprivate Hashtable ExpandedStates{ get { if (this._ordersExpandedState == null) { _ordersExpandedState = this.Session["_ordersExpandedState"] as Hashtable; if (_ordersExpandedState == null) { _ordersExpandedState = new Hashtable(); this.Session["_ordersExpandedState"] = _ordersExpandedState; } } return this._ordersExpandedState; }}//Clear the state for all expanded children if a parent item is collapsedprivate void ClearExpandedChildren(string parentHierarchicalIndex){ string[] indexes = new string[this.ExpandedStates.Keys.Count]; this.ExpandedStates.Keys.CopyTo(indexes, 0); foreach (string index in indexes) { //all indexes of child items if (index.StartsWith(parentHierarchicalIndex + "_") || index.StartsWith(parentHierarchicalIndex + ":")) { this.ExpandedStates.Remove(index); } }}//Save/load selected states Hash from the session//this can also be implemented in the ViewStateprivate Hashtable SelectedStates{ get { if (this._selectedState == null) { _selectedState = this.Session["_selectedState"] as Hashtable; if (_selectedState == null) { _selectedState = new Hashtable(); this.Session["_selectedState"] = _selectedState; } } return this._selectedState; }}protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e){ //save the expanded/selected state in the session if (e.CommandName == RadGrid.ExpandCollapseCommandName) { //Is the item about to be expanded or collapsed if (!e.Item.Expanded) { //Save its unique index among all the items in the hierarchy this.ExpandedStates[e.Item.ItemIndexHierarchical] = true; } else //collapsed { this.ExpandedStates.Remove(e.Item.ItemIndexHierarchical); this.ClearExpandedChildren(e.Item.ItemIndexHierarchical); } } //Is the item about to be selected else if (e.CommandName == RadGrid.SelectCommandName) { //Save its unique index among all the items in the hierarchy this.SelectedStates[e.Item.ItemIndexHierarchical] = true; } //Is the item about to be deselected else if (e.CommandName == RadGrid.DeselectCommandName) { this.SelectedStates.Remove(e.Item.ItemIndexHierarchical); }}protected void RadGrid1_DataBound(object sender, EventArgs e){ //Expand all items using our custom storage string[] indexes = new string[this.ExpandedStates.Keys.Count]; this.ExpandedStates.Keys.CopyTo(indexes, 0); ArrayList arr = new ArrayList(indexes); //Sort so we can guarantee that a parent item is expanded before any of //its children arr.Sort(); foreach (string key in arr) { bool value = (bool)this.ExpandedStates[key]; if (value) { RadGrid1.Items[key].Expanded = true; } } //Select all items using our custom storage indexes = new string[this.SelectedStates.Keys.Count]; this.SelectedStates.Keys.CopyTo(indexes, 0); arr = new ArrayList(indexes); //Sort to ensure that a parent item is selected before any of its children arr.Sort(); foreach (string key in arr) { bool value = (bool)this.SelectedStates[key]; if (value) { RadGrid1.Items[key].Selected = true; } }}protected void grdRebind_Click(object sender, EventArgs e){ RadGrid1.Rebind();}Please check this code library for further information.
Thanks,
Shinu.
0
Ivan
Top achievements
Rank 1
answered on 29 Jan 2015, 06:43 PM
Can the same be somehow achieved with Javascript
0
Hello Ivan,
I've already replied to your query in the other thread:
http://www.telerik.com/forums/grid-expad-collapse-after-refresh#ib5kZWxbdEudoNs_W5_eqw
I suggest we continue our conversation in the mentioned thread.
Regards,
Eyup
Telerik
I've already replied to your query in the other thread:
http://www.telerik.com/forums/grid-expad-collapse-after-refresh#ib5kZWxbdEudoNs_W5_eqw
I suggest we continue our conversation in the mentioned thread.
Regards,
Eyup
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
