Finding myself without a nice example of how to accomplish this, there was no other way of doing this myself 🙂

First, we need to find out which nodes are expanded. The right time to check for this is when nodes are expanded/collapsed. So here is the client-side function:

function uxProfileTree_NodeToggle(sender, args) {
    var tree = $find("");
    var allNodes = tree.get_allNodes();
    var nodeString = "";
    for (var i = 0; i < allNodes.length; i++) {
        var node = allNodes[i];
        var expanded = node.get_expanded();
            if (expanded) {
                nodeString = nodeString + node.get_value() + "*";
                createCookie("preofileTreeState", nodeString, 365);
        }
    }
}

This function is hooked into the OnClientCollapsed and OnClientExpanded client-side handlers of the treeview that you want to persist.

We now know what nodes are expanded so lets put the nodeString to work. In the Page_LoadComplete handler of my ASP.NET page I check for the cookie we created on the client and parse its value into an array by splitting the nodeString at the * char.

HttpCookie cookie = Request.Cookies[treeCookieName];
try
{
	if (cookie != null)
        {
        	string[] toggleParts = cookie.Value.Split(new[] { "*" }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string part in toggleParts)
                {
                	RadTreeNode toggledNode = uxProfileTree.FindNodeByValue(part);

                        toggledNode.Expanded = true;
                }
        }
}
catch
{
	// Remove the cookie if it messes up!
        Request.Cookies.Remove(treeCookieName);
}

For every value we find in the array, we look up the corresponding node in the tree. The only thing left is setting the node’s Expanded property to true. As a failsafe, the cookie is removed if anything messes up while trying to find the matching node. This is to make sure the user isn’t stuck with a broken cookie and a tree that wont expand its nodes.

Sander Harrewijnen

Author Sander Harrewijnen

Als ontwikkelaar mag ik graag problemen oplossen en nieuwe functionaliteit bouwen. Vanuit mijn creatieve kant hou ik me ook graag bezig met hoe iets bij de eindgebruiker aankomt. Je kunt bij mij dus ook terecht voor de opmaak en layout van een oplossing. Als je mij wilt afleiden, dan lukt dat altijd met een coole nieuwe gadget. Dat is namelijk mijn andere passie.

More posts by Sander Harrewijnen
24 November 2011

Leave a Reply