最近打算做一个有这些功能的界面,大体意思如下:
1、在一窗体中,左右两边分别有一个TreeView及MsFlexGrid控件,在左边的TreeView控件用于显示类别,MsFlexGrid控件用于显示选定类别的具体记录,但现在有一个问题,不知如何解决,就是要求左边的TreeView可以自由添加上下级类别,如果要实现这样的功能,那数据库的表结构应该如何建立?并且应该使用何种方法进行查询(当用户单击左边的类别时,自动查询出相对应类别的记录)?记得在哪个小软件上有看过这样的方法,比如TreeView最顶层类别的编码为(00),然后它的下层子类别的编码为(0001、0002、0003...)[多了一个(01)],然后如果这个子对象还有下层类别的话,那它的编码就应该是(000101、000102...),以此类推,我想采用此方法,不过却不知从何下手!
希望各位高手给我点思路及具体方法,“百”分感谢!
1、在一窗体中,左右两边分别有一个TreeView及MsFlexGrid控件,在左边的TreeView控件用于显示类别,MsFlexGrid控件用于显示选定类别的具体记录,但现在有一个问题,不知如何解决,就是要求左边的TreeView可以自由添加上下级类别,如果要实现这样的功能,那数据库的表结构应该如何建立?并且应该使用何种方法进行查询(当用户单击左边的类别时,自动查询出相对应类别的记录)?记得在哪个小软件上有看过这样的方法,比如TreeView最顶层类别的编码为(00),然后它的下层子类别的编码为(0001、0002、0003...)[多了一个(01)],然后如果这个子对象还有下层类别的话,那它的编码就应该是(000101、000102...),以此类推,我想采用此方法,不过却不知从何下手!
希望各位高手给我点思路及具体方法,“百”分感谢!
這是個簡單的問題﹐其實你這樣的問題﹐我以前做的測試是不聯系數據庫的﹐直接加入的。
FAQ里面一張貼。自個去找找吧。
--饮料类
--果汁类
--山楂汁
--柠檬汁
--碳酸类
--可口可乐
--百事可乐
--酒类
--啤酒类
--烟台啤酒
--青岛啤酒
--白酒类
--茅台
--五粮液
办公设备类
--…………以此类推
请问该如何建表,便于用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
2、只用一个表,父、子都在一起,但是每条记录都加一个parent字段
主要就是添加、删除节点、改节点名的操作
就是写这三段程序1、删除时要考虑用级连删除(或有子节点就不允许删除),可以用触发器(如果有的话)实现
也可以不物理删除,打删除标记也可以,这样可以undo
2、改节点名时注意级连更新如果你的sql熟,可以把大部分程序都放在存储过程、触发器中
sorry,我不在自己机器上
连接数据库,
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.从树中将数据据导出:
这个比较难点。思路是必须使用递归,代码我一时忘了,下次再给你。
搜索出数据表中要建字段中最长的记录作为循环的最大值开始循环,然后循环数据库中的每一条记录,循环完后可找出树结构中的最上层,将值做为treeview的key,然后外部循环加一步长,再循环数据库中的每一条记录,可找出第二层,依次类推,循环完毕。
比如楼上某位举的例子,“百事可乐”的FullPath属性为“食品饮料类\饮料类\碳酸类\”,只要在数据库中保存FullPath,读取的时候就可以根据它将该结构重现出来,然后再加上“百事可乐”结点就可以了。食品饮料类
--饮料类
--果汁类
--山楂汁
--柠檬汁
--碳酸类
--可口可乐
--百事可乐
--酒类
--啤酒类
--烟台啤酒
--青岛啤酒
--白酒类
--茅台
--五粮液
来信注明:treeview 的使用
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源码的数据库