I use Treeview in asp.net if I select some parent node, then it should be expanded and other parents will be reset after page transfer (navigation) ... im using the code below.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Session["TreeViewState"] != null) { List<string> list = (List<string>)Session["TreeViewState"]; RestoreTreeViewState(TreeViewApplicationSetup.Nodes, list); } } else { List<string> list = new List<string>(100); SaveTreeViewState(TreeViewApplicationSetup.Nodes, list); Session["TreeViewState"] = list; } } private void SaveTreeViewState(TreeNodeCollection nodes, List<string> list) { Session["TreeViewState"] = null; foreach (TreeNode node in nodes) { if (node.ChildNodes != null) { if (node.Expanded.HasValue && node.Expanded == true && !String.IsNullOrEmpty(node.Text)) { list.Add(node.Text); } if (node.ShowCheckBox == true && node.ChildNodes.Count == 0 && node.Parent.Expanded == true) { if (node.Checked == true) { list.Add(node.ValuePath + "-T"); } else { list.Add(node.ValuePath + "-F"); } } SaveTreeViewState(node.ChildNodes, list); } } } private void RestoreTreeViewState(TreeNodeCollection nodes, List<string> list) { foreach (TreeNode node in nodes) { if (list.Contains(node.Text) || list.Contains(node.ValuePath + "-T") || list.Contains(node.ValuePath + "-F")) { if (node.ChildNodes != null && node.ChildNodes.Count != 0 && node.Expanded.HasValue && node.Expanded == false) { if (node.Parent != null) { if (list.Contains(node.ChildNodes[0].ValuePath + "T") || list.Contains(node.ChildNodes[0].ValuePath + "-F")) { node.Expand(); } } else { node.Expand(); } } else if (node.ChildNodes != null && node.Expanded.HasValue && node.Expanded == false) { if (node.ShowCheckBox == true && list.Contains(node.Parent.Text) && list.Contains(node.Parent.Parent.Text)) { if (list.IndexOf(node.ValuePath + "-T") != -1) { node.Checked = true; } else if (list.IndexOf(node.ValuePath + "-F") != -1) { node.Checked = false; } } } } else { if (node.ChildNodes != null && node.ChildNodes.Count != 0 && node.Expanded.HasValue && node.Expanded == true) { node.Collapse(); } } if (node.ChildNodes != null && node.ChildNodes.Count != 0) { RestoreTreeViewState(node.ChildNodes, list); } } }
its jsut helps me expand parent nodes in each postback, but node parents didn't crash ....
source share