关于TreeView与数据库结合使用的问题

时间:2022-05-01 12:39:30
表结构
01 根节点
02 根节点
03 根节点
04 根节点

0101 为01的子节点
0201 为02的子节点
0301 为03的子节点
0401 为04的子节点

010101 为0101的子节点
020101 为0201的子节点
030101 为0301的子节点
040101 为0101的子节点

如何实现按照不同的编号 分类存放到相应的节点下
我的代码只能在表结构为以上整齐排放的情况下建立。

String  str;
    TTreeNode *rNode,*mNode,*zNode;
    TreeView1->Items->Clear();
    TADOQuery *qy=new TADOQuery(this);
    qy->ConnectionString=FrmMain->ok;
    qy->SQL->Clear();
    qy->SQL->Add("select *from 公司结构 where 编号<>'NULL'");
    qy->Open();
    qy->First();
    //str=qy->FieldByName("编号")->AsString;
     while (!qy->Eof)
     {
      str=qy->FieldByName("编号")->AsString;
      if(str.Length() ==2)
      {
      rNode=TreeView1->Items->Add(NULL,str);
      rNode->ImageIndex=0;
      rNode->SelectedIndex=0;
      }
      else
        if(str.Length() ==4)
        {
        mNode=View1->Items->AddChild(rNode,str);
        mNode->ImageIndex=0;
        mNode->SelectedIndex=0;
        }
        else
            if(str.Length() ==6)
            {
            zNode=View1->Items->AddChild(mNode,str);
            zNode->ImageIndex=1;
            zNode->SelectedIndex=1;
            }
      qy->Next();
    }

    delete qy;
}


8 个解决方案

#1


如果真的要像你所说的,那你就得要用三重循环了。。
第一重是对01,02,03,04进行操作的,
第二重是对0101,0201……如此类推。。。。

例如,当你生成了01结点时,不要返回,而是进行嵌套,搜索如0101的前两位是01的串。生成其子结点……而生成010101时也是如此做法。。。

其实是由于你已经确定是三重的,所以用循环嵌套搞定。
如何是未知的N层树的话,那就要写递归算法了。:)

#2


只是一种循环罢了,不难的。

#3


没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!

#4


其实你的问题很简单,我有一个跟你一样的现成的程序,改天给你吧!我觉得那是我刚刚学习程序的时候写得最好的代码

#5


scyongkang(永康)把你的程序发上来,大家共享吧!

#6


楼主的程序应该实现你所要的功能,但是有一个问题,就是如果根结点没有的话,那你的子节点放到什么地方呢?所以如果没有根节点的话有应该先创建根节点!

#7


只要把sql语句改为select *from 公司结构 where 编号<>'NULL order by 编号 
一个循环可以反问无限层;

#8


FOR jinhaiwu(海魂) 
select *from 公司结构 where 编号<>'NULL' order by 编号
 这是什么意思啊??好像和
select *from 公司结构 where 编号<>'NULL'
没区别啊?  

#1


如果真的要像你所说的,那你就得要用三重循环了。。
第一重是对01,02,03,04进行操作的,
第二重是对0101,0201……如此类推。。。。

例如,当你生成了01结点时,不要返回,而是进行嵌套,搜索如0101的前两位是01的串。生成其子结点……而生成010101时也是如此做法。。。

其实是由于你已经确定是三重的,所以用循环嵌套搞定。
如何是未知的N层树的话,那就要写递归算法了。:)

#2


只是一种循环罢了,不难的。

#3


没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!
没办法,求救:我不知怎么才能提问,说是要到小类社区,但我就是找不到小类社区在哪里!

#4


其实你的问题很简单,我有一个跟你一样的现成的程序,改天给你吧!我觉得那是我刚刚学习程序的时候写得最好的代码

#5


scyongkang(永康)把你的程序发上来,大家共享吧!

#6


楼主的程序应该实现你所要的功能,但是有一个问题,就是如果根结点没有的话,那你的子节点放到什么地方呢?所以如果没有根节点的话有应该先创建根节点!

#7


只要把sql语句改为select *from 公司结构 where 编号<>'NULL order by 编号 
一个循环可以反问无限层;

#8


FOR jinhaiwu(海魂) 
select *from 公司结构 where 编号<>'NULL' order by 编号
 这是什么意思啊??好像和
select *from 公司结构 where 编号<>'NULL'
没区别啊?