最近打算做一个有这些功能的界面,大体意思如下:
1、在一窗体中,左右两边分别有一个TreeView及MsFlexGrid控件,在左边的TreeView控件用于显示类别,MsFlexGrid控件用于显示选定类别的具体记录,但现在有一个问题,不知如何解决,就是要求左边的TreeView可以自由添加上下级类别,如果要实现这样的功能,那数据库的表结构应该如何建立?并且应该使用何种方法进行查询(当用户单击左边的类别时,自动查询出相对应类别的记录)?记得在哪个小软件上有看过这样的方法,比如TreeView最顶层类别的编码为(00),然后它的下层子类别的编码为(0001、0002、0003...)[多了一个(01)],然后如果这个子对象还有下层类别的话,那它的编码就应该是(000101、000102...),以此类推,我想采用此方法,不过却不知从何下手!
希望各位高手给我点思路及具体方法,“百”分感谢!

解决方案 »

  1.   

    记得在哪个小软件上有看过这样的方法,比如TreeView最顶层类别的编码为(00),然后它的下层子类别的编码为(0001、0002、0003...)[多了一个(01)],然后如果这个子对象还有下层类别的话,那它的编码就应该是(000101、000102...),以此类推,我想采用此方法,不过却不知从何下手!這個地方需要寫一個查找父節點的函數。
    這是個簡單的問題﹐其實你這樣的問題﹐我以前做的測試是不聯系數據庫的﹐直接加入的。
    FAQ里面一張貼。自個去找找吧。
      

  2.   

    我写过类似的东西,可以使用结点的Key属性或者FullPath属性,在数据库表里加一个表示结点路径的文本型字段好了。在构建树结构的时候还必须根据每个记录的路径将树还原出来——这个稍微繁琐一些。
      

  3.   

    如何设计表结构便于treeview显示?食品饮料类
        --饮料类
           --果汁类
               --山楂汁
               --柠檬汁
           --碳酸类
               --可口可乐
               --百事可乐
        --酒类
           --啤酒类
               --烟台啤酒
               --青岛啤酒
           --白酒类
               --茅台
               --五粮液
    办公设备类
          --…………以此类推
    请问该如何建表,便于用treeview显示,而且能反映他们之间的类别关系  
    回答:
     方法一:
     
    一个表
    字段如下:
    id(自动编号)
    fullname(文本)
    parentID(长整)parentid就是该种商品上一级的商品id三个字段即可:
    读取它的父ID即可反映关系ID    名称            父ID
    ——————————————————
    1    食品饮料类    0
    2    饮料类             1
    3    果汁类             2
    4    山楂汁             3
    5    柠檬汁             3
    6    碳酸类             2
    7    可口可乐             6
    8    百事可乐             6
    9    酒类             1
    10    啤酒类             9
    11    烟台啤酒             10
    12    青岛啤酒             10
    13    白酒类             9
    14    茅台             13
    15    五粮液             13
    16    办公设备类    0
    ……
      
    顶层的类别的parentID为Null方法二: 
    一个表
    字段如下:
    id(自动编号)
    fullname(文本)
    ProgramID(文本)programID是5位一段的数字,比如
    食品饮料类:00001
    饮料类:0000100001
    果汁类:000010000100001
    山楂汁:00001000010000100001
    柠檬汁:00001000010000100002
     
     
      

  4.   

    1、模拟会计科目,如楼主所说
    2、只用一个表,父、子都在一起,但是每条记录都加一个parent字段
      

  5.   

    谢谢 yoki(小马哥)的帮助!我理解你的思路,但是我不知道具体应该如何保存进数据库表里,及如何用代码从数据库里还原出来。我现在就是这个保存与还原的思路不懂如何做!
      

  6.   

    你对treeview熟悉吗
    主要就是添加、删除节点、改节点名的操作
    就是写这三段程序1、删除时要考虑用级连删除(或有子节点就不允许删除),可以用触发器(如果有的话)实现
       也可以不物理删除,打删除标记也可以,这样可以undo
    2、改节点名时注意级连更新如果你的sql熟,可以把大部分程序都放在存储过程、触发器中
    sorry,我不在自己机器上
      

  7.   

    我最近也在做类似的软件,我用的ACCESS数据库,在表里不用自动的ID号,手动编号,如你所说的1,01,0101等分类,表里加上表示路径的字段,用TREEVIEW的KEY属性就可以了
      

  8.   

    http://www.microsoft.com/china/community/Columns/Lihonggen/1.mspx
      

  9.   

    这个问题我实现过。表的设计和 yoki(小马哥) 一样,导数据进树:
    连接数据库,
    set res =  ........   此处为从数据库中获取数据集合。略
    set nodX as nodes
    while  not res 
        if res!Pid=0 then
            set nodX=treeview1.nodes.add(,,res!name,"K"& trim(str(res!ID)) )
            '给Key值的时候最好在ID值前面加个字符把它变成字符型,以便和ID值区别。
        else 
             set nodX=treeview1.nodes.add("K" & trim(str(res!Pid)),twvchild,res!name,"K" & trim( str(res!id)) )
         end if
         res.movenext
    loop
    2.从树中将数据据导出:
    这个比较难点。思路是必须使用递归,代码我一时忘了,下次再给你。
      

  10.   

    数据导入树中:(思路)
    搜索出数据表中要建字段中最长的记录作为循环的最大值开始循环,然后循环数据库中的每一条记录,循环完后可找出树结构中的最上层,将值做为treeview的key,然后外部循环加一步长,再循环数据库中的每一条记录,可找出第二层,依次类推,循环完毕。
      

  11.   

    为什么不用结点的FullPath属性呢?
    比如楼上某位举的例子,“百事可乐”的FullPath属性为“食品饮料类\饮料类\碳酸类\”,只要在数据库中保存FullPath,读取的时候就可以根据它将该结构重现出来,然后再加上“百事可乐”结点就可以了。食品饮料类
        --饮料类
           --果汁类
               --山楂汁
               --柠檬汁
           --碳酸类
               --可口可乐
               --百事可乐
        --酒类
           --啤酒类
               --烟台啤酒
               --青岛啤酒
           --白酒类
               --茅台
               --五粮液
      

  12.   

    写了个例子,来信发给你[email protected] 
    来信注明:treeview 的使用
      

  13.   

    http://expert.csdn.net/Expert/topic/2364/2364307.xml?temp=.93594
    http://expert.csdn.net/Expert/topic/2320/2320521.xml?temp=4.644412E-02
    http://www.csdn.net/Develop/article/24/24036.shtm
    http://www.microsoft.com/china/community/Columns/Lihonggen/1.mspx
    http://www.sijiqing.com/vbgood/code/index.asp?action=read&id=242
    一个管理VB源码的数据库