建立编号 名称 两个字段
编号字段两位为一级
譬如   00      rootnode1
       0000    node1
       000000   subnode1
       000001   subnode2
       0001     node2
       000100   subnode3
       000101   subnode4
       01       rootnode2   "  select * from table where 编号 like '00'",这样的查询语句可以建立rootnode1级别下
所有的子节点

解决方案 »

  1.   

    用循环添加,很简单,可以给你一个我以前编写的一个事例,其实可以有很多的办法实现
    不过在我的实现过程中,要求的是,顺序一定的添加:这是为已有节点动态添加子节点的例子:           classno=((MYNodeData)(trnode->Data))->ClassNo;
               tmpqry->SQL->Add("select * from "+FLinkTable_Class->TableName+" where "+ classNo_fd+" like '"+classno+"%'");
               tmpqry->Open();
               if(tmpqry->RecordCount>=2)
               {
                  tmpqry->First();
                  tmpqry->Next();
               }
               else
               {
                  tmpqry->Close();
                  delete tmpqry;
                  return(true);
               }
            }
            //******读取分类表数据,构建分类树***********
            //******逐条读取分类表的数据,定位树节点,进行新节点的添加*******
            while (!tmpqry->Eof)
            {
                StructData=new TMYNode;
                StructData->ClassNo=tmpqry->FieldByName(classNo_fd)->AsString;
                StructData->LibraryIndex=dbindex;
                StructData->NameField=namefield;            AnsiString classno=tmpqry->FieldByName(classNo_fd)->AsString;
                AnsiString classname=tmpqry->FieldByName(className_fd)->AsString;
                if  (classno.Length()>(((MYNodeData)(trnode->Data))->ClassNo).Length())
                    trnode=FtrView->Items->AddChildObject(trnode,classname,StructData);
                else
                {
                  while (classno.Length()<=(((MYNodeData)(trnode->Data))->ClassNo).Length())
                     trnode=trnode->Parent;
                  trnode=FtrView->Items->AddChildObject(trnode,classname,StructData);
                }
                trnode->ImageIndex=5;
                trnode->SelectedIndex=6;
                tmpqry->Next();
            }       tmpqry->Close();
      

  2.   

    这样的关系能不能在一个表里描述呢?Left1        / RIGHT1 - SUBR1
          \      - RIGHT2 - SUBR2
           ROOT1 - RIGHT3 - SUBR3
          /      - RIGHT4 - SUBR4
    left2        \ RIGHT5 - SUBR5left3        / RIGHT1 -  SUBR6
          \      - RIGHT3 -  SUBR7
           ROOT2 - RIGHT5 -  SUBR8
    left4 /      \ RIGHT6 -  SUBR9注意: RIGHT列在不同的ROOT下可能相同如:RIGHT1同时在ROOT1,ROOT2
      

  3.   

    你说的那样当然可以,但照这样一写,似乎很多代码就出来了,现在我希望用DEV EXPRESS的控件来实现,描述简单的结构几乎不用写代码,所以.....
      

  4.   

    转换一下数据结构吧标准的data   parentid   id
      

  5.   

    象以下结构如何定义KEYFIELD,LISTFIELD,PARENTFIELD?1 数据库
      root  SUBROOT
      1     0
      1     1
      2     2
      3     3
      3     4
       2 结构
    ROOT1
      SUBROOT1
      SUBROOT2
    ROOT2
      

  6.   

    to : qiubolecn(来自差生市) 
    如何转换?
      

  7.   

    增加一个字段parentid,表名为treetable表结构变成 root subroot    parentid用sql 语句
    update treetable set parentid=(select root from treetable t where t.subroot=treetable.root)
      

  8.   

    qiubolecn(来自差生市),你好,不知道你用过DXDBTREEVIEW没有?我现在都变的迷惑了,假如表结构如以上你说的那样,那么在 DXDBTREEVIEW里如何设置呢?
      

  9.   

    或者你能说说在TREEVIEW,TREELIST,DXDBTREEVIEW,DXDBTREELIST等表示树形结构的控件中,
    keyfield,
    displayfield,
    listfield,
    panrentfield,
    datafield
    等的含义吗?