我有一个数据库中的两个表,分别是atable和btable,具体结构和数据如下atableaid atitle
1   xiaowang
2   xiaoli
3   xiaozhou
...btable
bid   btitle   aid   bpid
1     chifan   1     0
2     cfdfan   1     1
3     fdsafn   3     0
4     434432   2     0
5     czxvvn   2     4
6     ioiuoo   1     1
7     yreyyy   1     0atable是一个栏目,btable是这个栏目下面的每个节点,而且每个节点下面还有节点的,其中bpid是0的为母节点,不为0的都是子节点,子节点的bpid对应的是母节点的bid,我想实现如下功能,作为一个目录树,给列举出来所有的内容,形式如下xiaowang(栏目)
--chifan(母节点bid是1)
----chifan(子节点bid是2)
----ioiuoo(子节点bid是6)
--yreyyy(母节点bid是7)
xiaoli(栏目)
--434432(母节点bid是4)
----czxvvn(子节点bid是5)
xiaozhou(栏目)
--fdsafn(母节点bid是3)请问这个该怎么做呢?

解决方案 »

  1.   

    假设你用的是WinForms,并且已经创建了两个表的实体类型ATable和BTable,代码如下,仅供参考:function BuildTree(TreeView tv)
    {
    IEnumerable<ATable> collA = GetATableData(); // 获取ATable中所有的记录
    IEnumerable<BTable> collB = GetBTableData(); // 获取BTable中的所有记录 tv.BeginUpdate();
    tv.Nodes.Clear(); foreach (ATable atable in collA)
    {
    TreeNode node = new TreeNode(atable.atitle);
    tv.Nodes.Add(node);
    BuildTree(node.Nodes, atable.aid, 0, collB);
    } tv.EndUpdate();
    }function BuildTree(TreeNodeCollection nodes, int aid, int bpid, IEnumerable<BTable> dataSource)
    {
    foreach (BTable btable in dataSource.Where(o => o.aid == aid && o.bpid == bpid))
    {
    TreeNode node = new TreeNode(btable.btitle);
    nodes.Add(node);
    BuildTree(node.Nodes, aid, btable.bid, dataSource);
    }
    }
      

  2.   

    Sorry,昨晚喝多了酒劲还没过,修正一下上面的代码:public void BuildTree(TreeView tv)
    {
    IEnumerable<ATable> collA = GetATableData(); // 获取ATable中所有的记录
    IEnumerable<BTable> collB = GetBTableData(); // 获取BTable中的所有记录 tv.BeginUpdate();
    tv.Nodes.Clear(); foreach (ATable atable in collA)
    {
    TreeNode node = new TreeNode(atable.atitle);
    tv.Nodes.Add(node);
    BuildTree(node.Nodes, atable.aid, 0, collB);
    } tv.EndUpdate();
    }private void BuildTree(TreeNodeCollection nodes, int aid, int bpid, IEnumerable<BTable> dataSource)
    {
    foreach (BTable btable in dataSource.Where(o => o.aid == aid && o.bpid == bpid))
    {
    TreeNode node = new TreeNode(btable.btitle);
    nodes.Add(node);
    BuildTree(node.Nodes, aid, btable.bid, dataSource);
    }
    }
      

  3.   

    我没有说明清楚,我的是网站web,不是winform
      

  4.   


    aid是atable中的主键,是和btable形成关系的键
      

  5.   


    Web里也有TreeView控件的,用法差不多。
      

  6.   

    作SQL查询
    string sql="select atable.atitle,btable.* from atable,
    btable where atable.aid=btable.aid"
    runsql(sql)while (Reader.read())
    {
    把节点加进去
    }