using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI.WebControls;
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 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 int RestoreTreeViewIndex;
public void RestoreTreeView(TreeView treeView, string key)
{
RestoreTreeViewIndex = 0;
RestoreTreeViewExpandedState(treeView.Nodes,
(List)HttpContext.Current.Session[key + treeView.ID] ?? new List());
}
private void RestoreTreeViewExpandedState(TreeNodeCollection nodes, List list)
{
foreach (TreeNode node in nodes)
{
if (RestoreTreeViewIndex >= list.Count) return;
node.Expanded = list[RestoreTreeViewIndex++];
if (node.ChildNodes.Count > 0)
{
RestoreTreeViewExpandedState(node.ChildNodes, list);
}
}
}
}
Una vez creada esta clase debemos incluir en la página o en el control de usuario el siguiente código.
En el load del arbol, una vez hayamos recuperado todos los elementos y generado la estructura del arbol ponemos la siguiente línea:
new TreeViewState().RestoreTreeView(arbol, this.GetType().ToString());
Y además de esto añadimos un evento Unload a nuestro arbol para que guarde el estado actual al cambiar de página.
protected void arbol_Unload(object sender, EventArgs e)
{
// save the state of all nodes.
new TreeViewState().SaveTreeView(arbol, this.GetType().ToString());
}
Y con esto ya se mantendrá perfectamente la estructura de3 nuestro TreeView entre las distintas páginas de nuestra aplicación.
No hay comentarios:
Publicar un comentario