Asp.net 在TreeView中,一次一个节点

Asp.net 在TreeView中,一次一个节点,asp.net,treeview,nodes,Asp.net,Treeview,Nodes,我有这样的树状视图: 1. 1.1 1.2 2. 2.1 2.2 .... 我想要完成的是,当用户单击父节点(例如节点1)时,除所选节点(节点1)外,每隔一个父节点折叠一次,换句话说,一次只展开一个子树 我正在从数据库填充菜单。 所以我在父节点填充部分中使用了这段代码 MenuTreeView.Nodes.Add(newNode); newNode.PopulateOnDemand = true; newNod

我有这样的树状视图:

    1.


      1.1

      1.2

    2.


      2.1

      2.2

....
我想要完成的是,当用户单击父节点(例如节点1)时,除所选节点(节点1)外,每隔一个父节点折叠一次,换句话说,一次只展开一个子树

我正在从数据库填充菜单。 所以我在父节点填充部分中使用了这段代码

MenuTreeView.Nodes.Add(newNode); 
newNode.PopulateOnDemand = true; 
newNode.Collapse();  
newNode.SelectAction= TreeNodeSelectAction.Expand;

但这不起作用。

在代码隐藏中使用SelectedNodeChanged事件。假设您有一个名为TreeView1的TreeView,循环遍历所有节点,将它们全部折叠,然后展开所选节点

    Protected Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged
        For Each tn As TreeNode In TreeView1.Nodes
            tn.Collapse()
        Next
        TreeView1.SelectedNode.Expand()
    End Sub

在代码隐藏中,使用SelectedNodeChanged事件。假设您有一个名为TreeView1的TreeView,循环遍历所有节点,将它们全部折叠,然后展开所选节点

    Protected Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged
        For Each tn As TreeNode In TreeView1.Nodes
            tn.Collapse()
        Next
        TreeView1.SelectedNode.Expand()
    End Sub

由于没有人给我答案或正确的建议,在尝试和做了一些研发之后,我得到了解决方案。 发帖,希望对别人有帮助

在(OnTerenodeExpand)节点展开事件上声明:

protected void Node_Expand(Object sender, TreeNodeEventArgs e)
        {

            if (e.Node.Parent == null)
                return;
            string strNodeValue = e.Node.Value;
            foreach (TreeNode node in e.Node.Parent.ChildNodes)
            {
                if (node.Value != strNodeValue)
                    node.Collapse();
            }

        }
附言:@AakashM:-如果你连一分钱都不值,千万别费心评论


谢谢StackOverflow。

由于没有人给我答案或正确的建议,在尝试并进行一些研发之后,我得到了解决方案。 发帖,希望对别人有帮助

在(OnTerenodeExpand)节点展开事件上声明:

protected void Node_Expand(Object sender, TreeNodeEventArgs e)
        {

            if (e.Node.Parent == null)
                return;
            string strNodeValue = e.Node.Value;
            foreach (TreeNode node in e.Node.Parent.ChildNodes)
            {
                if (node.Value != strNodeValue)
                    node.Collapse();
            }

        }
附言:@AakashM:-如果你连一分钱都不值,千万别费心评论


谢谢StackOverflow。

最好的答案是,如果一个父节点展开,另一个父节点将得到collpase

在C#中:



最好的答案是,若一个父节点是展开的,那个么另一个父节点将得到collpase

在C#中:



你想干什么?什么意思?我只希望一次只能打开一个父节点。所有其他父节点的所有子节点(已展开)应在展开父节点时折叠。注释询问您已尝试的内容。堆栈溢出不是一种代码编写服务。@akashM:如果你弄错了我的朋友,我不是要求你给我代码。请给我一个关于我将创建的需求代码的想法。你试图实现什么?这意味着什么?我只希望一次只能打开一个父节点。所有其他父节点的所有子节点(已展开)应在展开父节点时折叠。注释询问您已尝试的内容。堆栈溢出不是一种代码编写服务。@akashM:如果你弄错了我的朋友,我不是要求你给我代码。请给我一个关于我将创建的需求代码的想法。Thnx mccrager,用于帮助我。但事实上这并不能解决我的问题,我的解决方案确实有效。我唯一忽略的是你发布了C#,我给了你VB.NET。我没有告诉你你的解决方案是错误的。仅针对我的具体情况(要求),它并没有给出预期的结果。就这样。你的代码可能很完美。Thnx mccrager,谢谢你的帮助。但事实上这并不能解决我的问题,我的解决方案确实有效。我唯一忽略的是你发布了C#,我给了你VB.NET。我没有告诉你你的解决方案是错误的。仅针对我的具体情况(要求),它并没有给出预期的结果。就这样。你的代码可能是完美的。