TreeView如何加载SQL数据表

雨何方 2013-08-24 02:53:48
现在有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#的代码也要。


...全文
157 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨何方 2013-09-22
  • 打赏
  • 举报
回复
3楼楼主,你好: 首先说起不好意思,我这几天有事没有上论坛! 你写的是C#代码,能否同时提供一下VB.net代码!
alivestone 2013-08-30
  • 打赏
  • 举报
回复
递归的方法,网上的例子太多了。
bwangel 2013-08-28
  • 打赏
  • 举报
回复
建议使用第三方控件比如DevExpress的TreeList, 它可以绑定ID和ParentID,自动生成树结构,太方便了。
allanli 2013-08-28
  • 打赏
  • 举报
回复
两张表的用连接变成一张不就是啦 C#代码现在网上有自动转换成VB的
Jeremiah 2013-08-28
  • 打赏
  • 举报
回复
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); //添加员工信息
            }
        }
雨何方 2013-08-28
  • 打赏
  • 举报
回复
百度里搜的要不就是C#的,要不就是一张表的递归,而我这个是二张表。再说了,我刚刚接触,不太懂。
allanli 2013-08-28
  • 打赏
  • 举报
回复
递归调用生成树,这个百度一下很多例子啦

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧