62,243
社区成员




/// <summary>
/// 递归添加树的节点
/// </summary>
/// <param name="ParentID"></param>
/// <param name="pNode"></param>
public void AddTree(int ParentID,TreeNode pNode)
{
DataSet ds=(DataSet) this.ViewState["ds"];
DataView dvTree = new DataView(ds.Tables[0]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[parentId] = " + ParentID;
foreach(DataRowView Row in dvTree)
{
TreeNode Node=new TreeNode() ;
if(pNode == null)
{//添加根节点
Node.Text = Row["name"].ToString();
TreeView1.Nodes.Add(Node);
//Node.Expanded=false;//是否展开若设置为true 则ExpandLevel="1"无效
AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归
}
else
{
//添加当前节点的子节点
Node.Text = Row["name"].ToString();
//Node.Target = mainFrame;
Node.NavigateUrl = Row["url"].ToString();
pNode.Nodes.Add(Node);
//Node.Expanded = false;
AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归
}
}
}
}
}
/// <summary>
/// 递归添加树的节点
/// </summary>
/// <param name="ParentID"></param>
/// <param name="pNode"></param>
public void AddDefaultTree(int ParentID,TreeNode pNode)
{
try
{
DataView dvTree = new DataView();
dvTree=//返回数据;
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[PARENTID] = " + ParentID;
foreach(DataRowView Row in dvTree)
{
TreeNode Node=new TreeNode() ;
if(pNode == null)
{
//添加根节点
Node.NavigateUrl=Row["TargetURL"].ToString();
Node.Target=Row["TargetWindow"].ToString();
Node.Text= "<img src='images/main/leftmenuicon4.gif' border='0' hspace='3' align='absmiddle'><span onmousemove=javascript:title='"+Row["MenuName"]+"'>"+Row["MenuName"].ToString().Trim()+"</span>";
this.OAModualMenu.Nodes.Add(Node);
Node.Expanded=false;
AddTree(Int32.Parse(Row["MenuID"].ToString()), Node); //再次递归
}
else
{
//添加当前节点的子节点
Node.Text= "<Li type='square'><span onmousemove=javascript:title='"+Row["MenuName"].ToString()+"'>"+Row["MenuName"].ToString().Trim()+"</span></Li>";
Node.NavigateUrl=Row["TargetURL"].ToString();
Node.Target=Row["TargetWindow"].ToString();
pNode.Nodes.Add(Node);
Node.Expanded = false;
AddTree(Int32.Parse(Row["MenuID"].ToString()), Node); //再次递归
}
}
}
catch
{
}
}
//调用,比如在Page_Load()事件中:
//调用递归函数,完成树形结构的生成
this.AddTree(0, (TreeNode)null);
System.Data.DataTable dt;//设你已经查询出了DataTable,做为全局变量,当然做为参数传递也可以。
//==========================================
TreeView tv = new TreeView(); //新建一个TreeView
System.Data.DataRow[] drs = dt.Select();
foreach (System.Data.DataRow dr in drs) { //将根目录加入
if (IsSubClass("", dr["B"].ToString(), 0)) {
TreeNode tn = new TreeNode();
tn.NavigateUrl = "showclass.aspx?id" + dr["A"].ToString();
tn.Text = dr["C"].ToString();
tv.CheckedNodes.Add(tn);
AddClass(dr["B"].ToString(), tn, 1); //加子目录
}
}
//===========================
public void AddClass(string pid, TreeNode pnode, int depth) {
System.Data.DataRow[] drs = dt.Select();
foreach (System.Data.DataRow dr in drs) {
if(IsSubClass(pid,dr["B"],depth +1)){ //判断为子目录
TreeNode tn = new TreeNode();
tn.NavigateUrl = "showclass.aspx?id" + dr["A"].ToString();
tn.Text = dr["C"].ToString();
pnode.ChildNodes.Add(tn);
AddClass(dr["B"].ToString(), tn, depth++); //递归
}
}
}
public bool IsSubClass(string pid , string cid, int depth) { //判断该目录是否为指定目录的子目录
if (cid.Length == 3 && depth == 0) //根目录深度为0,长度为3
return true; //根目录
else if (cid.Length > (depth + 1) * 3) //子目录长度为深度+1乘3
return false;
else if (cid.Substring(0, cid.Length - 3) != pid) //子目录除后面3个数外前面应与父目录的字串一样
return false;
else
return true;
}