Maintaining a TreeView State With a web.sitemap File – C#

September 8th, 2009 by admin No comments »

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)
    {
        List list = 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!

The gradual decline of the liberal health care debate.

September 8th, 2009 by admin No comments »

We want universal health care for all!
We want universal health care for the poor!
We want a public health care plan for everyone!
We want a strong public option!
We want a public option!
We want more options in the private sector!
We’re happy with what we have!