关于用树型控件(TreeView)与数据库相连的方法及思路!(高手请进)

stiffe01 2003-12-16 04:24:56
最近打算做一个有这些功能的界面,大体意思如下:
1、在一窗体中,左右两边分别有一个TreeView及MsFlexGrid控件,在左边的TreeView控件用于显示类别,MsFlexGrid控件用于显示选定类别的具体记录,但现在有一个问题,不知如何解决,就是要求左边的TreeView可以自由添加上下级类别,如果要实现这样的功能,那数据库的表结构应该如何建立?并且应该使用何种方法进行查询(当用户单击左边的类别时,自动查询出相对应类别的记录)?

记得在哪个小软件上有看过这样的方法,比如TreeView最顶层类别的编码为(00),然后它的下层子类别的编码为(0001、0002、0003...)[多了一个(01)],然后如果这个子对象还有下层类别的话,那它的编码就应该是(000101、000102...),以此类推,我想采用此方法,不过却不知从何下手!
希望各位高手给我点思路及具体方法,“百”分感谢!
...全文
276 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudtarget 2004-02-07
  • 打赏
  • 举报
回复
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源码的数据库
planetike 2003-12-23
  • 打赏
  • 举报
回复
写了个例子,来信发给你.planetike@hotmail.com
来信注明:treeview 的使用
哇呜 2003-12-23
  • 打赏
  • 举报
回复
为什么不用结点的FullPath属性呢?
比如楼上某位举的例子,“百事可乐”的FullPath属性为“食品饮料类\饮料类\碳酸类\”,只要在数据库中保存FullPath,读取的时候就可以根据它将该结构重现出来,然后再加上“百事可乐”结点就可以了。

食品饮料类
--饮料类
--果汁类
--山楂汁
--柠檬汁
--碳酸类
--可口可乐
--百事可乐
--酒类
--啤酒类
--烟台啤酒
--青岛啤酒
--白酒类
--茅台
--五粮液
xzp1030 2003-12-23
  • 打赏
  • 举报
回复
数据导入树中:(思路)
搜索出数据表中要建字段中最长的记录作为循环的最大值开始循环,然后循环数据库中的每一条记录,循环完后可找出树结构中的最上层,将值做为treeview的key,然后外部循环加一步长,再循环数据库中的每一条记录,可找出第二层,依次类推,循环完毕。
xcfei 2003-12-23
  • 打赏
  • 举报
回复
这个问题我实现过。表的设计和 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.从树中将数据据导出:
这个比较难点。思路是必须使用递归,代码我一时忘了,下次再给你。
fmouse 2003-12-17
  • 打赏
  • 举报
回复
我最近也在做类似的软件,我用的ACCESS数据库,在表里不用自动的ID号,手动编号,如你所说的1,01,0101。。。。。。等分类,表里加上表示路径的字段,用TREEVIEW的KEY属性就可以了
stiffe01 2003-12-17
  • 打赏
  • 举报
回复
都一天了,还是没能做出来!望各位高手再次相助,谢了!
lihonggen0 2003-12-17
  • 打赏
  • 举报
回复
http://www.microsoft.com/china/community/Columns/Lihonggen/1.mspx
WQ771211 2003-12-16
  • 打赏
  • 举报
回复
你对treeview熟悉吗
主要就是添加、删除节点、改节点名的操作
就是写这三段程序

1、删除时要考虑用级连删除(或有子节点就不允许删除),可以用触发器(如果有的话)实现
也可以不物理删除,打删除标记也可以,这样可以undo
2、改节点名时注意级连更新

如果你的sql熟,可以把大部分程序都放在存储过程、触发器中
sorry,我不在自己机器上
stiffe01 2003-12-16
  • 打赏
  • 举报
回复
谢谢 yoki(小马哥)的帮助!我理解你的思路,但是我不知道具体应该如何保存进数据库表里,及如何用代码从数据库里还原出来。我现在就是这个保存与还原的思路不懂如何做!
WQ771211 2003-12-16
  • 打赏
  • 举报
回复
1、模拟会计科目,如楼主所说
2、只用一个表,父、子都在一起,但是每条记录都加一个parent字段
yoki 2003-12-16
  • 打赏
  • 举报
回复
如何设计表结构便于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


哇呜 2003-12-16
  • 打赏
  • 举报
回复
我写过类似的东西,可以使用结点的Key属性或者FullPath属性,在数据库表里加一个表示结点路径的文本型字段好了。在构建树结构的时候还必须根据每个记录的路径将树还原出来——这个稍微繁琐一些。
daisy8675 2003-12-16
  • 打赏
  • 举报
回复
记得在哪个小软件上有看过这样的方法,比如TreeView最顶层类别的编码为(00),然后它的下层子类别的编码为(0001、0002、0003...)[多了一个(01)],然后如果这个子对象还有下层类别的话,那它的编码就应该是(000101、000102...),以此类推,我想采用此方法,不过却不知从何下手!

這個地方需要寫一個查找父節點的函數。
這是個簡單的問題﹐其實你這樣的問題﹐我以前做的測試是不聯系數據庫的﹐直接加入的。
FAQ里面一張貼。自個去找找吧。
feilong215 2003-12-16
  • 打赏
  • 举报
回复
来看看,一楼哦

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧