没有人回答,看来真正是问题
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 ");
代码如下(修正了你