基于数据库动态生成树形目录-ASP教程,数据库相关
来源:作者: 发布时间:2007-12-26 02:11:55
一、 目录树的广泛应用
为了这段内容,在百度上搜了搜,内容一大通,相关的竟没有。搜什么搜嘛?用处不是明摆着吗?资源管理器文档夹的管理,论坛中多级论坛的管理,java中的awt正是缺乏包括树形目录这样的组件才用处受限......谁这么没礼貌,一点面子都不给,叫我怎么讲下去?清了清嗓子:
在我们项目中常常会出现自关联的数据表,从整体看去,整个表就呈现为一个树形数据结构。当我们对这个表进行显示、编辑时,假如不采用好的表现形式,会显得很笨拙,采用树形目录进行管理显然是个不错的主意。
(斧子抡了一圈,感觉好极了,接着讲...)在web中树形目录能够用javascript实现,但一些细节问题上例如树形目录传值(点击一个子节点,打开相关链接),多级目录连同节点的增加、删除、拖动上受各种制肘。其实采用第三方控件显然也是个不错的主意。
二、 关于智岛目录树控件
好,我们今天的主人公--轻便犀利的智岛目录树控件(下载地址:http://www.oapro.com/ostarocx/download/otree.ocx)出场了。他采用vc++6.0研发,是标准的ocx控件,能够应用于windows环境下vb、vc、pb、dephi、asp、jsp等编程语言中。他采用xml文档作为接口文档,该接口文档既能够是个现成的文档,也能够是动态生成的xml格式文档(换句话说能够基于数据库动态生成目录树节点)。智岛目录树控件支持节点的复制、移动、重命名连同权限控件,并且没有对目录的层数进行限制。介绍了这么多,想必欲欲越试了。在asp中小试牛刀先:
三、 注册添加控件
1. 注册智岛目录树控件
下载(下载地址:http://www.oapro.com/ostarocx/download/otree.ocx)智岛目录树控件(其文档名为otree.ocx)后,按照如下方法注册控件:
点击“开始”→“运行”;在运行对话框中输入以下命令:
regsvr32 < otree.ocx文档的绝对路径> 注册智岛目录树控件控件
regsvr32 /u < otree.ocx文档的绝对路径> 解除智岛目录树控件的注册
2. 在页面中添加智岛目录树控件
在页面中加入以下代码,即可插入智岛目录树控件:
codebase="http://www.oapro.com/ostarocx/download/otree.ocx">
其中:
width和height:指控件的显示宽度和高度;
id:指控件对象的名称,通过该名称实现对控件的操作;
codebase:指没有安装智岛目录树控件的客户端运行该页面时自动下载安装该控件的地址。
三、 从xml文档生成树形目录
1. xml文档格式
xml是个好东东,但是也要符合一定的格式呀,不然控件可不认哦!下面是一份xml文档格式:
|研发部|
...
其中:
nodename:指节点名称,如有上级节点,要包括上级节点名称,节点名称间以符号"\"分隔。例“我的办公桌\公告通知\电子邮件”表明根节点为“我的办公桌”,父节点为“公告通知”,本节点为“电子邮件”。假如问您包含五级的节点名称是怎样时,呵呵,不要拿西红柿扔我!
nodetype:节点类型,一般均指“href”。
imageindex:节点名称前显示的小图标,其中0表示文档夹状图标,4表示数据表状图标。
下面是一份xml格式文档源码:
我的办公桌
href
mydesk.aps
0
0
我的办公桌\公告通知
href
公告通知.aps
0
0
我的办公桌\公告通知\电子邮件
0
我的办公桌\公告通知\电子邮件\收件箱
4
我的办公桌\公告通知\电子邮件\发件箱
4
我的办公桌\公告通知\电子邮件\已发邮件
我的办公桌\日程安排
0
我的办公桌\日程安排\日历
2. 代码实现
通过以下语句通知智岛目录树控件打开xml文档:
otree.openxmlfile("")
其中引号内xml文档的绝对路径,例如:
otree.openxmlfile("c:\otree.xml")
运行效果见下图:
已看见您频频点头的样子,但又喃喃自语:假如要根据数据库中内容生成树形目录该...?呵呵,下面我们就进入正题(敢情前面这么多文字是骗稿费的啊?谁?嘘...,小声点,千万别让小编听见):
四、 基于数据库生成树形目录
1. xml文档格式
将树形目录的节点存入数据库,为我们动态形成树形目录打下良好的基础。当然,也有些目录树是表现一个数据库中的数据结构(父节点是数据库名,子节点是数据表)。不管怎样,有了前面的基础,现在我们所需做的只是将数据库的内容形成上面格式的xml文档。下面有一份asp源码,将数据库中结构形成xml文档,其中变量datasource存储传递过来的数据库名称。
<%
dim datasource
datasource=request("datasource")
%>
<%=datasource%>
0
|研发部|市场部|
0
<%
strconn="dbq="+server.mappath("db\"&datasource)+";defaultdir=;driver={microsoft access driver (*.mdb)};"
set objconn=server.createobject("adodb.connection")
objconn.open strconn
set rsschema=objconn.openschema(20)
rsschema.movefirst
do until rsschema.eof
if rsschema("table_type")="table" then
%>
<%=datasource%>\<%=rsschema("table_name")%>
href
<%=rsschema("table_name")%>
4
|研发部|市场部|
0
<%
end if
rsschema.movenext
loop
set objconn=nothing
%>
2. 代码实现
这时候的接口方法跟直接打开xml文档的不相同了:
otree.setnodexml(otree.httpget("http://www.oapro.com/ostarocx/sample/dataman/otree.asp","datasource=otree.mdb"))
其中方法httpget有二个参数,第一个参数为我们上面介绍的实现数据库转换xml格式的网页地址,一定要为网址格式,不能用相对或绝对路径
(因为现在该方法尚不支持),第二个参数为传递到该文档的参数,这里我们传递的是数据库名称。
按照上面的介绍您很快的实现了一个树形目录,点根节点,展开,点父节点,展开,再点...,咦,怎么没反应?您希望有什么反应?噢,不好意思,差点忘介绍了:
五、 响应节点事件
智岛树形目录控件提供了一个接口方法用以响应节点事件:
eventtreeselchanged(stritemname, stritemdata,stritemtype)
其中:
stritemname 节点名称
stritemdata 节点数据
stritemtype 节点类型
这三个参数由智岛树形目录控件提供给我们研发者,供我们调用。
我们可通过脚本实现对事件的触发,以下是一范例代码:
以上代码实现了点击节点时,弹出一对话框显示该节点的名称。
六、 范例
嗯,好累呀!用敲键盘敲得差点变形的小手揉揉看屏幕看得发酸的大眼睛,又闪过一个念头,再给出一个范例吧:http://www.oapro.com/ostarocx/sample/ogrid_f 。在这个范例中,从下拉框中选择数据库名称后树形目录的内容会发生变化,点击节点会显示该节点所代表的数据表中的数据内容。整个范例充分展示了上面文章内容的技术细节。下面是范例截图:
还没有关于此文章的相关评论!