读书人

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

发布时间: 2012-01-23 21:57:28 作者: rapoo

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

读书人网 >asp.net

热点推荐