当前位置:编程学习 > C#/ASP.NET >>

c# winform TreeView绑定数据库

我有数据库A、B

其中A表的数据有

    aid     aName
     1       One
     2       Two
     3       Three


B表的数据有
     
    bid    bName
     1      One
     2      Two
     3      Three


我现在想要的树状图是

      One
        -Two
           -Three

A表存的是节点的父节点。
B表存的是节点。
应该如何改,或者说如何做才能实现。。
麻烦大家了。。。 C# WinForm TreeView 数据库 分级 --------------------编程问答-------------------- 自己顶。。。。在线等。。。拜托大家了 --------------------编程问答-------------------- 给个思路也行,最好能给个简单的代码。。 --------------------编程问答-------------------- A、B表没有关联的吗?我觉得你没把需求写清楚 --------------------编程问答-------------------- A-B表的关系详细点,没弄明白 。。。 --------------------编程问答--------------------
引用 3 楼 huang7331185 的回复:
A、B表没有关联的吗?我觉得你没把需求写清楚


抱歉,没有表述清楚。

A、B表有关联的。有个中间表叫AB表吧。里面放的是aid和bid。。。 --------------------编程问答--------------------
引用 4 楼 HopeInHeart 的回复:
A-B表的关系详细点,没弄明白 。。。



A表的数据有
   aid     aName
     1       One
     2       Two
     3       Three
     4       Test

    bid    bName
     1      One
     2      Two
     3      Three
     4      Test1
     5      Test2

中间AB存放着aid和bid,而中间表有个这个的要求,就是:


aid    bid
 4      4
 4      5


那么树状图为

Test
  -Test1
  -Test2

那么我想在这个基础上再有这样的

One
   -Two
     -Three


TreeView该怎么遍历。。。谢谢大家了。 --------------------编程问答--------------------
DataTable dtA = GetTable("select * form A");// 取出A表的数据
            foreach (DataRow dr in dtA.Rows)
            {
                TreeNode tnParent = new TreeNode();
                tnParent.Name = dr["aid"].ToString();
                tnParent.Text = dr["aName"].ToString();

                DataTable dtB = GetTable("select * from B where bid in(select bid from AB where aid = '" + dr["aid"].ToString() + "')");//取出A下的节点
                foreach (DataRow dr in dtB.Rows)
                {
                    TreeNode tnChild = new TreeNode();
                    tnChild.Text = dr["bName"].ToString();
                    tnChild.Name = dr["bid"].ToString();

                    tnParent.Nodes.Add(tnChild);
                }

                treeView1.Nodes.Add(tnParent);
            }
--------------------编程问答--------------------
引用 7 楼 HopeInHeart 的回复:
DataTable dtA = GetTable("select * form A");// 取出A表的数据
            foreach (DataRow dr in dtA.Rows)
            {
                TreeNode tnParent = new TreeNode();
                tnParent.Name = dr["aid"].ToString();
                tnParent.Text = dr["aName"].ToString();

                DataTable dtB = GetTable("select * from B where bid in(select bid from AB where aid = '" + dr["aid"].ToString() + "')");//取出A下的节点
                foreach (DataRow dr in dtB.Rows)
                {
                    TreeNode tnChild = new TreeNode();
                    tnChild.Text = dr["bName"].ToString();
                    tnChild.Name = dr["bid"].ToString();

                    tnParent.Nodes.Add(tnChild);
                }

                treeView1.Nodes.Add(tnParent);
            }




谢谢。我试试。 --------------------编程问答--------------------
引用 7 楼 HopeInHeart 的回复:
DataTable dtA = GetTable("select * form A");// 取出A表的数据
            foreach (DataRow dr in dtA.Rows)
            {
                TreeNode tnParent = new TreeNode();
                tnParent.Name = dr["aid"].ToString();
                tnParent.Text = dr["aName"].ToString();

                DataTable dtB = GetTable("select * from B where bid in(select bid from AB where aid = '" + dr["aid"].ToString() + "')");//取出A下的节点
                foreach (DataRow dr in dtB.Rows)
                {
                    TreeNode tnChild = new TreeNode();
                    tnChild.Text = dr["bName"].ToString();
                    tnChild.Name = dr["bid"].ToString();

                    tnParent.Nodes.Add(tnChild);
                }

                treeView1.Nodes.Add(tnParent);
            }



这样子不能加到3级节点。。 --------------------编程问答-------------------- 这是我遍历出
aid    bid
 4      4
 4      5


那么树状图为

Test
  -Test1
  -Test2
这种情况的代码。


public static void bindTreeView(DataTable dt, TreeNodeCollection treeNodeCollection, String path)
        {
            //实例化数据视图对象,绑定传递进来的数据表dt,设置行过滤器和排序为空,数据视图行状态为当前行
            DataView dv = new DataView(dt, null, null, DataViewRowState.CurrentRows);
            string strParentID = "";
            TreeNode tnParent = null;
            //遍历数据视图
            foreach (DataRowView drv in dv)
            {
                //判断当前父节点的名称是否和当前数据视图的名称相符
                if (strParentID != drv["aName"].ToString())
                {
                //假如不符合,则增加父节点
                    strParentID = drv["aName"].ToString();
                    tnParent = treeNodeCollection.Add(strParentID);
                }
                //增加子节点和子节点有关数据对象
                tnParent.Nodes.Add(drv["bName"].ToString());
            }
        } --------------------编程问答--------------------
引用 9 楼 ericsing 的回复:
Quote: 引用 7 楼 HopeInHeart 的回复:

DataTable dtA = GetTable("select * form A");// 取出A表的数据
            foreach (DataRow dr in dtA.Rows)
            {
                TreeNode tnParent = new TreeNode();
                tnParent.Name = dr["aid"].ToString();
                tnParent.Text = dr["aName"].ToString();

                DataTable dtB = GetTable("select * from B where bid in(select bid from AB where aid = '" + dr["aid"].ToString() + "')");//取出A下的节点
                foreach (DataRow dr in dtB.Rows)
                {
                    TreeNode tnChild = new TreeNode();
                    tnChild.Text = dr["bName"].ToString();
                    tnChild.Name = dr["bid"].ToString();

                    tnParent.Nodes.Add(tnChild);
                }

                treeView1.Nodes.Add(tnParent);
            }



这样子不能加到3级节点。。
恩,那你要把3级的逻辑关系 ,一级、二级、三级节点的对应关系说清楚了,你描述的只能做到两级,代码贴给你了 ,修改下逻辑关系就可以了 --------------------编程问答--------------------
引用 11 楼 HopeInHeart 的回复:
Quote: 引用 9 楼 ericsing 的回复:

Quote: 引用 7 楼 HopeInHeart 的回复:

DataTable dtA = GetTable("select * form A");// 取出A表的数据
            foreach (DataRow dr in dtA.Rows)
            {
                TreeNode tnParent = new TreeNode();
                tnParent.Name = dr["aid"].ToString();
                tnParent.Text = dr["aName"].ToString();

                DataTable dtB = GetTable("select * from B where bid in(select bid from AB where aid = '" + dr["aid"].ToString() + "')");//取出A下的节点
                foreach (DataRow dr in dtB.Rows)
                {
                    TreeNode tnChild = new TreeNode();
                    tnChild.Text = dr["bName"].ToString();
                    tnChild.Name = dr["bid"].ToString();

                    tnParent.Nodes.Add(tnChild);
                }

                treeView1.Nodes.Add(tnParent);
            }



这样子不能加到3级节点。。
恩,那你要把3级的逻辑关系 ,一级、二级、三级节点的对应关系说清楚了,你描述的只能做到两级,代码贴给你了 ,修改下逻辑关系就可以了




二级的代码我也贴上去了。麻烦给下n级的思路。拜托了 --------------------编程问答-------------------- n级用递归,直到没有下级节点 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 如果是B表的N级节点,就对B表添加节点的进行递归 --------------------编程问答-------------------- 我的结构想要这样子的:

Test
  -Test1
  -Test2

One
  -Two
    -Three --------------------编程问答--------------------
引用 16 楼 ericsing 的回复:
我的结构想要这样子的:

Test
  -Test1
  -Test2

One
  -Two
    -Three


就是根节点不止一个的 --------------------编程问答-------------------- 现在我归属为一个表格了:

表格A

aid   aName    aGroup
 1      A      GroupA
 2      B      GroupA
 3      C      GroupC
 4      D      GroupD
 5      E         D
 6      F         E


现在只想树状图成为这样

GroupA
   -A
GroupB
   -B
GroupC
   -C
GroupD
   -D
     -E
       -F

大家帮帮忙。。谢谢了。。 --------------------编程问答-------------------- 楼主 Q我吧 我发给你 整套 代码
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,