现在这个树是必须点击树前点的“+”才能打开子节点,我想点击树的名称就能打开子节点。    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
           Searconditions();
        }
    }
    protected void Open(object sender, EventArgs e)
    {
        Response.Write(e.ToString());
    }
    //查询导航加载到树中
    private void Searconditions()
    {
       List<PurviewDetail> nidList = Session["nidList"] as List<PurviewDetail>;
       if (nidList != null)
       {
           for (int i = 0, leng = nidList.Count; i < leng; i++)
           {
               Navigate n = NavigateBLL.Select(nidList[i].nid);
               if (n != null)
               {
                   TreeNode rootnode = new TreeNode();
                   rootnode.Value = n.nid.ToString();
                   rootnode.Text = n.nodeName;
                   rootnode.NavigateUrl = n.nurl=="#"?"javascript:opnodes(this)":n.nurl;
                   rootnode.Collapse();
                   Searchallnavg(n.nid.ToString(), rootnode);
               }
           }
       }
       else
       {
           Response.Redirect("login.aspx");
       }
    }
    //递归
    void Searchallnavg(string nid, TreeNode rootnode)
    {
        string where2 = string.Format("treeNode='{0}'", nid);
        List<Navigate> slist = NavigateBLL.Select(where2, "treeNode", true, false);
        if (slist.Count!=0 && slist!=null)
        {
            foreach (Navigate nag in slist)
            {
                TreeNode treenode = new TreeNode();
                treenode.Text = nag.nodeName.ToString().Trim();
                treenode.Value = nag.nid.ToString().Trim();
                treenode.NavigateUrl = nag.nurl == "#" ? "javascript:opnodes(this)" : nag.nurl;
                treenode.Collapse();
                rootnode.ChildNodes.Add(treenode);
                Searchallnavg(nag.nid.ToString(), treenode); 
            }
            TreeView1.Nodes.Add(rootnode);
        }
    }
    /// <summary>
    /// 树的展开后激发
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {
        Pramp.OpTree = e.Node;
    }
    /// <summary>
    /// 选中节点更改后激发
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e)
    {
        if (this.TreeView1.SelectedNode.ChildNodes.Count > 0)
        {
            this.TreeView1.ExpandAll();
            this.TreeView1.SelectedNode.Expand();
        }
    }
    /// <summary>
    /// 在节点的选中状态后更改激发
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void TreeView1_TreeNodeCheckChanged1(object sender, TreeNodeEventArgs e)
    {
        if (this.TreeView1.SelectedNode.NavigateUrl=="#")
        {
            e.Node.Expand();
        }
    }

解决方案 »

  1.   

    treeview好像只提供了+折叠吧 如果要实现你说的 你就自己写一个树就好了
      

  2.   

    c258489446请问你那有没有其他的不是控件的写法?给我发一下行不?[email protected]
    我测试了一下。如果我把数据库里的URL地址(也就是“#”)删除。那么点击文字就可以了。可是如果那样的话。折叠起来了!!!
      

  3.   

    http://www.865171.cn/
    自己去寻找一个你可以用的
      

  4.   

    好像是不加ULR属性的话 点击父级菜单可以折叠 但是不好控制 
    因为不是所有的父级菜单都有子菜单的
      

  5.   

    如果你想在客户端完成,两个选择:
    1.把帖子发到JS区去,去找一个JS的Tree控件,很多的。
    2.用SliverLight来做。ASP.net的控件都是服务器端的。如果只是为了展开,收拢树节点在服务器端编码,效率太低了,即使使用AJAX,也感觉很不好。