读书人

TreeView怎么加载SQL数据表

发布时间: 2013-11-01 14:43:02 作者: rapoo

TreeView如何加载SQL数据表
现在有SQL二张表,分别是部门表—epartMent),人事表(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); //添加员工信息
}
}


读书人网 >VB Dotnet

热点推荐