首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

没有人回答,看来真正是有关问题

2012-01-23 
没有人回答,看来真正是问题treeview取某级节点及下所有子节点问题,再晚点项目就完不成了。我有一个部门表,

没有人回答,看来真正是问题
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 ");

代码如下(修正了你的几处笔误):
private void initTree( string parentId)
{


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

tmpNd = new TreeNode();
tmpNd.ID = dv[ "departmentid "].ToString();
tmpNd.Text = dv[ "depname "].ToString();
deptree.Nodes.Add(tmpNd);

initTree1(tmpNd.Nodes, parentId);
}

private void initTree1( 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 = dv[ "departmentid "].ToString();
tmpNd.Text = dv[ "depname "].ToString();
Nds.Add(tmpNd);
intId=drv[ "upperdep "].ToString();
initTree1(tmpNd.Nodes,tmpNd.ID);
}
}

热点排行