阿信的树就是这样做的,你可参考一下这个http://fason.nease.net/ 上面的树不错

解决方案 »

  1.   

    /// <summary>
    /// 递归函数,获得所有节点
    /// DepartID:请求的用户部门ID
    /// ParentID:父节点ID
    /// RootNode:父节点 
    /// </summary>
    private void AddNode(string ParentID,string UserID,string DepartID,TreeNode RootNode)
    {
    DataTable objDt=myDB.GetTree(ParentID,UserID,DepartID);//获得父节点ID为ParentID,并且ID为DepartID的部门的成员可以访问的节点
    for(int i=0;i<objDt.Rows.Count;i++)
    {
    TreeNode subNode=new TreeNode();
    subNode.Text=objDt.Rows[i]["text"].ToString();
    subNode.Expanded=true;
    if(objDt.Rows[i]["url"].ToString()!="")
    {
    subNode.NavigateUrl=objDt.Rows[i]["url"].ToString(); //设置节点的链接
    }
    subNode.ID=objDt.Rows[i]["id"].ToString();//设置节点ID
    subNode.Target="MainFrame"; //设置节点链接目标
    RootNode.Nodes.Add(subNode);
    this.AddNode(objDt.Rows[i]["id"].ToString(),UserID,DepartID,subNode); //递归调用,直到列出所有子节点
    }
    }/// <summary>
    /// 获得指定节点的所有一级子节点
    /// ParentNodeID:父节点ID
    /// </summary>
    public DataTable GetNodes(string ParentNodeID,bool bEdit,int EditItem)
    {
    DataTable objDt=myDB.ExecProcWithIDModeReplay("TreeView_Select_Node",ParentNodeID,1);
    for(int i=0;i<objDt.Rows.Count;i++)
    {
    if(!bEdit&&objDt.Rows[i]["parentid"].ToString()!="")//如果不是编辑模式,则添加超链接
    {
    objDt.Rows[i]["text"]="<a href='tree_manage.aspx?nodeid="+objDt.Rows[i]["id"].ToString()+"'>"+objDt.Rows[i]["text"].ToString()+"</a>";
    } if(objDt.Rows[i]["departid"].ToString()!=""&&i!=EditItem)//如果此行没有被编辑并且允许访问部门不为空,则显示部门名称
    {
    string [] strDepart=objDt.Rows[i]["departid"].ToString().Split(new char[] {','});
    objDt.Rows[i]["departid"]="";
    foreach(string str in strDepart)
    {
    objDt.Rows[i]["departid"]+=myDB.ExecSql("select name from department where id='"+str+"'")+"<br>";
    }
    } if(objDt.Rows[i]["userid"].ToString()!=""&&i!=EditItem)//如果此行没有被编辑并且允许访问员工不为空,则显示员工名称
    {
    string [] strDepart=objDt.Rows[i]["userid"].ToString().Split(new char[] {','});
    objDt.Rows[i]["userid"]="";
    foreach(string str in strDepart)
    {
    objDt.Rows[i]["userid"]+=myDB.ExecSql("select username from userinfo where id='"+str+"'")+"<br>";
    }
    }

    } return objDt;
    }
      

  2.   

    上面是我做的一个树,用的MSSQL数据库+存储过程,myDB是一个数据库类,下面是关于Tree的代码:
    /// <summary>
    /// 获得树控件一个节点的所有子节点
    /// ParentID为父节点的ID,DepartID为发出请求的用户的所在部门ID
    /// 调用存储过程TreeView_Select
    /// </summary>
    public DataTable GetTree(string ParentID,string UserID,string DepartID)
    {
    if(this.OpenDB())
    {
    DataTable objDt=new DataTable();
    try
    {
    SqlDataAdapter objAdapter=new SqlDataAdapter("TreeView_Select",objConn);
    objAdapter.SelectCommand.CommandType=CommandType.StoredProcedure; objAdapter.SelectCommand.Parameters.Add("@ParentID",SqlDbType.Char,36);
    objAdapter.SelectCommand.Parameters["@ParentID"].Value=ParentID;

    objAdapter.SelectCommand.Parameters.Add("@UserID",SqlDbType.Char,36);
    objAdapter.SelectCommand.Parameters["@UserID"].Value=UserID; objAdapter.SelectCommand.Parameters.Add("@DepartID",SqlDbType.Char,36);
    objAdapter.SelectCommand.Parameters["@DepartID"].Value=DepartID; objAdapter.Fill(objDt); this.CloseDB();
    }
    catch
    {
    return null;
    } return objDt;
    }
    else
    {
    return null;
    }}