需求:在数据库中建立一个部门表:Department,其中有两个字段,一个是id保存其自身的编号,一个是pid保存它的父编号,我想在treeview控件中显示出来部门的隶属关系,请问如何写一个递归函数来解决这个问题,其他方法也可以,谢谢!!!注意:要求部门可以动态添加,并且部门的层次不确定!!!

解决方案 »

  1.   

    参看
    http://blog.csdn.net/knight94/archive/2006/05/01/704281.aspx
      

  2.   

    private void createNodes(TreeNodeCollection nodes,DataTable source,string curID)
            {
                string filter = "[pid] = '"+curID+"'";
                DataRow[] rows = source.Select(filter);
                foreach(DataRow dr in rows)
                {
                    TreeNode node = new TreeNode();
                    node.Text = dr["部门名称"].ToString();
                    nodes.Add(node);
                    this.createNodes(node.Nodes,source,dr["id"].ToString());
                }
            }
      

  3.   

    DataTable dt = new DataTable();//select * from department
    this.treeView1.Nodes.Clear();
    this.createNodes(this.treeView1.Nodes,dt,"0");***************************************************
    private void createNodes(TreeNodeCollection nodes,DataTable source,string curID)
            {
                string filter = "[pid] = '"+curID+"'";
                DataRow[] rows = source.Select(filter);
                foreach(DataRow dr in rows)
                {
                    TreeNode node = new TreeNode();
                    node.Text = dr["部门名称"].ToString();
                    nodes.Add(node);
                    this.createNodes(node.Nodes,source,dr["id"].ToString());
                }
            }
      

  4.   

    TREEVIEW加载目录最好使用XML,那样维护起来方便
      

  5.   

    to:Eddie005(♂) №.零零伍 (♂) ( )
    为什么用你的方法,只显示最后一个级别的节点呀
    谢谢
      

  6.   

    to:Eddie005(♂) №.零零伍 (♂) ( )
    问题已经解决
    就是用的你的函数
    是我写错了
    谢谢你
      

  7.   


    Eddie005的方法是取出所有然后再Select选择,对于数据量不大的菜单,是很好的方法,但是如果数据量太大,一定程度上会影响效率,可以采用先绑定根节点,点击后再加载的方法.