Just got this working today. This example uses c#.
Set PopulateNodesForClient to FALSE for this to work!
MasterPage.Master.cs (code behind)
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
public partial class Reports_MasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
new TreeViewState().RestoreTreeView(TreeView1);
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
if (TreeView1.SelectedNode.Value != string.Empty)
{
Response.Redirect(TreeView1.SelectedNode.Value);
}
}
protected void TreeView1_Unload(object sender, EventArgs e)
{
new TreeViewState().SaveTreeView(TreeView1, this.GetType().ToString());
}
}
TreeViewState.cs (C# class file in App_Code folder)
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Collections.Generic; ////// Summary description for TreeViewState /// public class TreeViewState { public void SaveTreeView(TreeView treeView, string key) { Listlist = new List (); SaveTreeViewExpandedState(treeView.Nodes, list); HttpContext.Current.Session[key + treeView.ID] = list; } private int RestoreTreeViewIndex; public void RestoreTreeView(TreeView pTreeView) { if (pTreeView.SelectedNode != null) { pTreeView.SelectedNode.Selected = true; pTreeView.SelectedNode.Parent.Expand(); pTreeView.SelectedNode.Expand(); } } private void SaveTreeViewExpandedState(TreeNodeCollection nodes, List list) { foreach (TreeNode node in nodes) { list.Add(node.Expanded); if (node.ChildNodes.Count > 0) { SaveTreeViewExpandedState(node.ChildNodes, list); } } } private void RestoreTreeViewExpandedState(TreeNodeCollection nodes, List list) { foreach (TreeNode node in nodes) { if (RestoreTreeViewIndex >= list.Count) break; node.Expanded = list[RestoreTreeViewIndex++]; if (node.ChildNodes.Count > 0) { RestoreTreeViewExpandedState(node.ChildNodes, list); } } } }
Happy Coding!