日期:2014-05-19  浏览次数:20402 次

没有人回答,看来真正是问题
treeview取某级节点及下所有子节点问题,再晚点项目就完不成了。

我有一个部门表,数据库部份数据如下:

departmentid       name               upperdep
1                             所有部门         0
2                             财务部             1
3                             保安部             1
5                             会计科             2
6                             出纳科             2
8                             会计一组         5
9                             会计二组         5


我的打算是:在用户登陆时,取得用户所在部门的ID,比如财务部经理所在的部门ID为2,根据部门ID得

到所在部门和其下所有子节点的值,形成

--财务部
    --会计科
        -会计一组
        -会计二组
    --出纳科

这样一棵树。

我的代码用了递归,但调用时只取得了所有的子部门
    --会计科
        -会计一组
        -会计二组
    --出纳科

,没有取得当前所在部门即财务部。

我的代码如下:
private   void   Page_Load(object   sender,   System.EventArgs   e)
{

if(!Page.IsPostBack)
{

create();
intiTree(deptree.Nodes   ,   "2 ");
//这里取2时,只得到所有子部门,如果取1,财务部、保安部又进来了,这不是我想要的。

}

 
}
private   DataSet     create()
{      
SqlConnection   CN   =   new   SqlConnection

(ConfigurationSettings.AppSettings[ "constr "]);
cmdSelect= "select   *   from   department ";
myCmd=new   SqlDataAdapter(cmdSelect,CN);
ds=new   DataSet();
myCmd.Fill(ds, "department ");
return   ds;
}

private   void   intiTree(   TreeNodeCollection   Nds,string   parentId)
{

DataView   dv   =   new   DataView();
TreeNode   tmpNd;
string   intId;
dv.Table   =   ds.Tables[ "department "];
dv.RowFilter   =   "upperdep= "   +   parentId   +     " ";

foreach   (DataRowView   drv   in   dv)  
{
tmpNd   =   new   TreeNode();
tmpNd.ID   =     drv[ "departmentid "].ToString();
tmpNd.Text   =   drv[ "depname "].ToString();
Nds.Add(tmpNd);
intId=drv[ "upperdep "].ToString();
intiTree(tmpNd.Nodes,tmpNd.ID);
}
}



------解决方案--------------------
给你段代码吧,在记事本里直接改的你的代码,没有测试过,有问题再回,使用时记得把 Page_Load 方法里的
intiTree(deptree.Nodes , "2 ");
改为
initTree( "2 ");

代码如下(修正了你