阿信的树就是这样做的,你可参考一下这个http://fason.nease.net/ 上面的树不错
解决方案 »
- 存储过程返回数据行及总数
- 遇到一个奇怪的问题。。。大家帮我看看......
- 诚心求教利用ActiveXObject("htmlfile")实现Server Push在FireFox不兼容的处理方法!!!在线狂等~!!!急!!!!!!
- 奇怪的问题:System.Exception: 没有找到站点
- 帮忙解释下asp:HyperLinkColumn的关键字
- 请问读取AD中未disable的用户信息的searcher条件该怎么写?
- Gridview做了查询,结果只能访问第1页,谢谢
- 我想学B/S开发请问首选什么工具平台?大讨论
- !OLEDB异常
- 在一个用框架页面实现的动态表单填写系统中如何处理事件与刷新问题!(欢迎在线讨论)
- 两个动态生成的DropDownList关系问题
- 菜鸟问题
/// 递归函数,获得所有节点
/// 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;
}
/// <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;
}}