该tree将从集团--分公司--部门--人员全部提出来进行浏览并选择操作.表结构如下分为组织表和人员表:
组织表:   组织码                                     父节点
1 001 A集团公司
2 001001 南京分公司                      001
3 001002 成都分公司               001
4
5 001001001 南京分公司总经理办公室     001001
6 001001001003 经营部              001001001
7 001001001004 财务部              001001001
8 001001001005 发展部              001001001人员表:     组织码
1       001001001003001 孙南               南京分公司总经理办公室经营部    总经理
2       001001001005001 李海               南京分公司总经理办公室发展部    部长
------------------------------------------------------------
希望实现动态无限级别功能,并要求效率.刚转型.net请大家帮忙了.查过很多以前的链接数据结构大多不同没有有价值的.

解决方案 »

  1.   

    伪代码:void BuildTree(TreeNode rootNode, DataTable dtOrgUnit,bool first)
    {
        TreeNode childNode;
        String filter;
        if(first){
             filter = "ParentId is null";
        } else {
             filter = string.Format("ParentId = '{0}'", rootNode.NodeData)
        }
        foreach(DataRow row in dtOrgUnit.Select(filter) {
             childNode = new TreeNode();
             childNode.Text = row["Description"].ToString();
             childNode.NodeData = row["Id"].ToString();
             rootNode.Nodes.Add(childNode);
             BuildTree(childNode,dtOrgUnit,false);
        }
    }void BuildOrgUnit()
    {
         DataTable dtOrgUnit = get data from database;
         TreeNode rootNode = new TreeNode();
         rootNode.Text = "Org Unit"
         treeControl.Nodes.Add(rootNode);
         BuildTree(rootNode,dtOrgUnit,true);
    }
      

  2.   

    神啊,说过了数据结构不一样的吗,我不是用传统pid 和id来表示级别,是以001001 为字符串表示的,再请教.请看看我的说明,谢谢.
      

  3.   

    没看出你有什么特别。还是子节点,父节点!我博客里面有个!不过加了一个搜索字段:searchid,如果你有兴趣可以看看,也可以留言!
      

  4.   

    神啊,说过了数据结构不一样的吗,我不是用传统pid   和id来表示级别,是以001001   为字符串表示的,再请教.请看看我的说明,谢谢.不用传统PID和ID就代表你有个性了?是以001001   为字符串就算好的了?别搞笑了。
    以字符只不过是利用了编码规则来确定结点结构。这样只适用于辅助。因为这样根本不严谨。如果实在用这种方法,就是字符串的操作。判断位数。不知道你要人。给你讲什么
      

  5.   

    兄弟,你就不知道变通一下吗?做程序员做到这种地步,服了你。人家告诉你的是思想,不是直接让你把函数拷过去就用。修改如下:void   BuildTree(TreeNode   rootNode,   DataTable   dtOrgUnit,bool   first) 

            TreeNode   childNode; 
            String   filter; 
            if(first){ 
                      filter   =   "Id like '___'"; 
            }   else   { 
                      filter   =   string.Format("Id like '{0}___'",   rootNode.NodeData) 
            } 
            foreach(DataRow   row   in   dtOrgUnit.Select(filter)   { 
                      childNode   =   new   TreeNode(); 
                      childNode.Text   =   row["Description"].ToString(); 
                      childNode.NodeData   =   row["Id"].ToString(); 
                      rootNode.Nodes.Add(childNode); 
                      BuildTree(childNode,dtOrgUnit,false); 
            } 
    } void   BuildOrgUnit() 

              DataTable   dtOrgUnit   =   get   data   from   database; 
              TreeNode   rootNode   =   new   TreeNode(); 
              rootNode.Text   =   "Org   Unit" 
              treeControl.Nodes.Add(rootNode); 
              BuildTree(rootNode,dtOrgUnit,true); 
    }
      

  6.   

    呵呵,真不知道该说什么,想问问楼主是从什么语言刚转型DOT NET的。