首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

TreeView怎么加载SQL数据表

2013-11-01 
TreeView如何加载SQL数据表现在有SQL二张表,分别是部门表(DepartMent),人事表(Person),其架构分别如下:Dep

TreeView如何加载SQL数据表
现在有SQL二张表,分别是部门表(DepartMent),人事表(Person),其架构分别如下:
DepartMent表:
各列名是:
DID:部门ID,
DepNo:部门编号
DepName:部门名称
UPID:上级部门ID
DID    DepNo  DepName  UPID
1      10   总经办   0
2      11     综合部   0
3      1101   人事部   2
4      1102   后勤部   2 
Person表:
各列名是:
PID:人员ID
DepNo:部门编号
PerNo:人员编号
PerName:人员姓名
DID:部门ID
PID  DepNo  PerNo     PerName    DID
1    10      10001    张三         1
2    1101    1101001  李四     3
3    1102    1102001  王二     4

现在想用Treeview控件显示,效果如下:
10--总经办
 10001--张三
11--综合部
  1101--人事部
   1101001--李四
 1102--后勤部
   1102001--王二

请各位大侠指教并贴出代码
我的开发平台是:
VB.NET(Visual Basic)2008+SQL 2005
如果有C#的代码也要。



[解决办法]
1. 先获取全部的部门及部门下的员工信息。

引用
select 
d.DID DDID,
d.DepNo,
d.DepName,
d.UPID,
p.PID,
p.PerNo,
p.PerName,
p.DID PDID
from 
DepartMent d left join Person p on d.DID = p.DID
order by d.UPID


2. 根据员工信息Select出的DataTable获取到带有级联关系的部门信息。
(直接Select部门表,获得DataTable也可以)

 DataTable dtDept = dt.DefaultView.ToTable(true, new string[] {"DDID","DepNo","DepName","UPID" });


3. 对部门数据进行递归,生成树。 
递归的同时,将部门作为参数获取该部门下的员工信息。将员工添加到该结点中。

//伪代码
              DataTable dtDept = dt.DefaultView.ToTable(true, new string[] {"DDID","DepNo","DepName","UPID" });
            for (int i = 0; i < dtDept.Rows.Count; i++)
            {
                if (dtDept.Rows[i]["UPID"].ToString().Equals("0"))
                {
                    TreeNode node = new TreeNode();
                    TreeView1.Nodes.Add(node);
                    DataTable[] rows = //根据dtDept的数据获取的该父结点下的子结点的信息。
                        DataTable[] employees = //获得属于该节点的员工信息
                    InitEmp4Dept(node, employee);  //为该结点添加员工信息
                    InitSubDept(node, rows, dtDept); //为该结点添加子结点,递归。
                }
            }

          protected void InitSubDept(TreeNode node, DataRow[] subnodes, DataTable dtDept)
        {
            if (subnodes.Length == 0)
                return;
            for (int i = 0; i < subnodes.Length; i++)
            {
                TreeNode subnode = new TreeNode();
                node.ChildNodes.Add(subnode);
                DataTable[] rows = //根据dtDept的数据获取的该父结点下的子结点的信息。
                   DataTable[] employees = //获得属于该节点的员工信息
                InitEmp4Dept(node, employee);


                InitSubDept(node, rows, dtDept);
            }
        }

     protected void InitEmp4Dept(TreeNode node, DataRow[] employees)
        {
            if (employees.Length == 0)
                return;
            for (int i = 0; i < employees.Length; i++)
            { 
                TreeNode nodeemp = new TreeNode();
                node.ChildNodes.Add(nodeemp); //添加员工信息
            }
        }


热点排行