Asp.net treeview extends only selected parent

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 ....

+4
source share
1 answer

In your .aspx file:

 ... <asp:TreeView ID="Tree" runat="server" OnSelectedNodeChanged="Tree_SelectNodeChange"> ... 

Then in codebehind Page_Load you simply bind the data to the TreeView and the OnSelectedNodeChanged handler, you need to collapse all the nodes, and then expand the selected node and all its parents:

 protected void Tree_SelectNodeChange(object sender, EventArgs e) { var tree = (TreeView)sender; foreach (TreeNode node in tree.Nodes) { node.CollapseAll(); } ExpandToRoot(tree.SelectedNode); } private void ExpandToRoot(TreeNode node) { node.Expand(); if (node.Parent != null) { ExpandToRoot(node.Parent); } } 
+3
source

Source: https://habr.com/ru/post/1301540/


All Articles