后勤部 1001  1001
人事部 1002  1002
市场部 1003  1003
维修部 2001  1001
卫生部 2002  1001
调动科 2003  1002
财政部 2004  1002
调查科 2005  1003
销售部 2006  1003
部门名称 编号     上级部门
            string sqlsda = "select * from bumen";
            SqlConnection con = new SqlConnection(sqlcon);
            SqlDataAdapter sda=new SqlDataAdapter(sqlsda,con);
           
            sda.Fill(ds);
            TreeNode pNode = null;
            AddTree("1001", pNode);
        }        public void AddTree(string fatherNum, TreeNode pNode)
        {            DataView dvTree = new DataView(ds.Tables[0]);            dvTree.RowFilter = "[部门编号] = " + fatherNum;
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                {         //添加根节点   
                    Node.Text = Row["部门名称"].ToString();                    Tree1.Nodes.Add(Node);
                    AddTree(Row["上级部门"].ToString(), Node);         //再次递归   
                }
                else
                {       //添加当前节点的子节点   
                    Node.Text = Row["部门名称"].ToString();
                    pNode.Nodes.Add(Node);                    AddTree(Row["上级部门"].ToString(), Node);           //再次递归   
                }
            }
        }各路神仙,各显神通吧,帮帮忙
我这死循环了

解决方案 »

  1.   

    给你贴个代码你自己看看吧
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Text;
    using System.Windows.Forms;using 核心类.公用;
    using 核心类.系统;
    using 核心类.控件基类;
    namespace 窗体控件
    {
        public partial class 部门组织结构树控件窗体 : 插件窗体基类
        {
            public 部门组织结构树控件窗体()
            {
                InitializeComponent();
            }        #region   对外属性
            public TreeView tvw_部门树
            {
                get{ return this._tvw_部门结构树; }
            }        #endregion        #region 自定义方法
            public void 初始化结构树()
            {
                this._tvw_部门结构树.Nodes.Clear();            //获取组织关系模型类
                业务对象模型类 cls_模型类 = 全局环境类.获取模型类("Organ");
                业务对象模型类 cls_关系模型类 = 全局环境类.获取模型类("Organ Tree");
                if (cls_模型类 == null || cls_关系模型类 == null)
                    return;            List<组织信息类> lst_根部门 = 组织信息类.获取首个组织对象();
                if (lst_根部门 == null)
                    return;            foreach (组织信息类 cls_根部门信息 in lst_根部门)
                {
                    TreeNode trn_根节点 = 形成树节点(cls_根部门信息);
                    if (trn_根节点 != null)
                    {
                        trn_根节点.ImageIndex = 0;
                        trn_根节点.SelectedImageIndex = 0;
                        this._tvw_部门结构树.Nodes.Add(trn_根节点);
                        递归加载组织结构(trn_根节点, cls_模型类, cls_关系模型类, cls_根部门信息);
                    }
                }
            }        private void 递归加载组织结构(TreeNode trn_父节点, 业务对象模型类 cls_模型类, 业务对象模型类 cls_关系模型类, 组织信息类 cls_组织信息)
            {
                List<组织信息类> lst_子组织对象 = null;
                关系管理泛型基类 cls_关系泛型基类 = new 关系管理泛型基类();
                cls_关系泛型基类.获取父对象关联的子(cls_组织信息, cls_关系模型类, cls_模型类, out lst_子组织对象);            foreach (组织信息类 cls_子组织信息 in lst_子组织对象)
                {
                    if (cls_子组织信息 == null)
                        continue;                TreeNode trn_子节点 = 形成树节点(cls_子组织信息);
                    if (trn_父节点 == null)
                        continue;                trn_子节点.ImageIndex = 1;
                    trn_子节点.SelectedImageIndex = 1;
                    trn_父节点.Nodes.Add(trn_子节点);                递归加载组织结构(trn_子节点, cls_模型类, cls_关系模型类, cls_子组织信息);
                }
            }        private TreeNode 形成树节点(组织信息类 cls_组织对象)
            {
                if (cls_组织对象 == null)
                    return null;            TreeNode trn_组织节点 = new TreeNode(cls_组织对象.str_部门名称);
                trn_组织节点.Tag = cls_组织对象;
                trn_组织节点.ImageIndex = 0;            return trn_组织节点;
            }        #endregion
        }
    }
      

  2.   


    /// <summary>
            /// 绑定根节点
            /// </summary>
            /// <param name="ds"></param>
            private void BindRoot(DataSet ds)
            {
                //获得最外层节点
                DataRow[] dr = ds.Tables[0].Select("Parentid=0");
                foreach (DataRow r in dr)
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = r["modulename"].ToString();
                    string str = r["Parentid"].ToString();
                    TreeView1.Nodes.Add(tn);                //调用添加子节点方法
                    AddChildNode(ds, tn, str);
                }
            }
            /// <summary>
            /// 子节点添加方法
            /// </summary>
            /// <param name="ds">数据集</param>
            /// <param name="tn">当前节点对象</param>
            private void AddChildNode(DataSet ds, TreeNode tn, string str)
            {
                DataRow[] dr = ds.Tables[0].Select("Parentid=" + str);
                foreach (DataRow r in dr)
                {
                    TreeNode tc = new TreeNode();
                    tc.Text = r["modulename"].ToString();
                    string s = r["Parentid"].ToString();
                    tc.NavigateUrl = r["menupath"].ToString();
                    tn.ChildNodes.Add(tc);
                    tc.Target = "mainframe";
                    //递归调用
                    AddChildNode(ds, tc, s);
                }
            } 
      

  3.   


    /// <summary>
            /// 绑定根节点
            /// </summary>
            /// <param name="ds"></param>
            private void BindRoot(DataSet ds)
            {
                //获得最外层节点
                DataRow[] dr = ds.Tables[0].Select("上级部门=1001");
                foreach (DataRow r in dr)
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = r["部门名称"].ToString();
                    string str = r["编号"].ToString();
                    TreeView1.Nodes.Add(tn);                //调用添加子节点方法
                    AddChildNode(ds, tn, str);
                }
            }
            /// <summary>
            /// 子节点添加方法
            /// </summary>
            /// <param name="ds">数据集</param>
            /// <param name="tn">当前节点对象</param>
            private void AddChildNode(DataSet ds, TreeNode tn, string str)
            {
                DataRow[] dr = ds.Tables[0].Select("Parentid=" + str);
                foreach (DataRow r in dr)
                {
                    TreeNode tc = new TreeNode();
                    tc.Text = r["部门名称"].ToString();
                    string s = r["编号"].ToString();
                    //tc.NavigateUrl = r["menupath"].ToString();
                    tn.ChildNodes.Add(tc);
                    //tc.Target = "mainframe";
                    //递归调用
                    AddChildNode(ds, tc, s);
                }
            }