用ASP如何实现树型目录

chinascprogram 2003-06-16 11:18:02
用ASP如何实现树型目录
请各位帮忙
...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨狼 2003-09-13
  • 打赏
  • 举报
回复
仿照csdn左面的菜单的ASP+数据库无限级树菜单代码分享

近来问无限级数据库树菜单人很多,我就自己做了一个仿照csdn左面的菜单,自己暂时不用,完全是给大家分享的,要数据库和代码文件请到www.ymdg.com/tree.rar下载,如果有人提供空间存放那是最好了。
本文完全采用大家熟悉的ASP(VBS)制作,过写日子我再写一个基于XML技术的给大家。
QQ:28963147,email:panyuguang962@sohu.com
感谢CSDN和全体网友!
说明:
Access数据库
● 数据库名:tree
● 表名:tree
● 字段名的设计
ID 文本类型 编码
Name 文本类型 节点文字
HyperLink 文本类型 相关信息
---------------------------------------------------
ID | Name | HyperLink
---------------------------------------------------
1_1_1 | ASP | http://www.csdn.net
---------------------------------------------------
1_1_1_1 | DHTML | http://www.csdn.net
---------------------------------------------------
1_2_2 | JAVA | http://www.csdn.net
---------------------------------------------------
1_1_2 | JavaScript | http://www.csdn.net
---------------------------------------------------
1_2_1 | VB | http://www.csdn.net
---------------------------------------------------
1_2_1_2 | VBA | http://www.csdn.net
---------------------------------------------------
1_1 | WEB开发 | http://www.csdn.net
---------------------------------------------------
1 | WWW.CSDN.net | http://www.csdn.net
---------------------------------------------------
1_2_1_1 | 基础类 | http://www.csdn.net
---------------------------------------------------
1_3_1 | 基础类 | http://www.csdn.net
---------------------------------------------------
1_2 | 开发语言 | http://www.csdn.net
---------------------------------------------------
1_1_1_2 | 内建对象 | http://www.csdn.net
---------------------------------------------------
1_3 | 数据库 | http://www.csdn.net
----------------------------------------------------
文件:nolimited.asp经简单测试好用!代码如下:
<html>
<head>
<META name=VI60_defaultClientScript content=VBScript>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>asp树的研究</title>
</head>
<style type="text/css">
<!--
.aa {
font-size: 14px;
color: #000000;
text-align: center;
vertical-align: middle;
letter-spacing: 0px;
word-spacing: 0px;
}
-->
</style>
<body bgcolor="DEE3F7">
<%
dim cn,rs,SQL ,Para,NumChild
set cn=server.CreateObject("ADODB.connection")
set rs=server.createobject("ADODB.recordset")
set rs1=server.createobject("ADODB.recordset")
cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("tree.mdb")
SQL="Select * from tree order by ID"
rs.open SQL,cn,3,2
do while not rs.EOF
SQL="Select ID from tree where ID like '" & rs("ID") & "%' and ID<>'" & rs("ID") & "' order by ID"
Para=rs("ID") & "|"
NumChild=0
rs1.open SQL,cn, 3,2
NumChild=rs1.RecordCount
do while not rs1.EOF
Para =Para & rs1("ID") & "|"
rs1.MoveNext
loop
Para=cstr(trim(left(Para,len(Para)-1)))
rs1.Close
%>
<table id="T<%=rs("ID")%>"
border=1
cellpadding=0
cellspacing=0
bordercolor="#DEE3F7"
class="aa"
abbr="<%=Para%>"
summary=<%=checkid(rs("ID"))%>
style="cursor:hand"
onClick="vbs:subtree '<%=Para%>'" >

<tr>
<td width="<%=17+checkid(rs("ID"))*20%>"
height="20" align="right">
<table width="20" height="20" border="1" cellpadding="0" cellspacing="0" bordercolor="#DEE3F7">
<tr>

<td align="center" valign="middle" bordercolor="#000000" id="R<%=rs("ID")%>" ><%if NumChild=0 then Response.Write "." else Response.Write "-"%></td>
</tr>
</table>
</td>

<td height="20"
nowrap
bordercolor="#FFFFFF"
onMouseOver="vbs:me.bgcolor='#CCCCCC':me.bordercolor='#999999'"
onMouseOut="vbs:me.bgcolor='#DEE3F7':me.bordercolor='#ffffff'"
title="<%=rs("HyperLink")%>">
<%=rs("Name")%></td>
</tr>
</table>


<%
rs.MoveNext
loop
rs.Close:set rs=nothing
cn.Close:set cn=nothing
function checkid(x)
dim Tempnum
Tempnum=0
for i=1 to len(x)
if mid(x,i,1)="_" then
Tempnum=Tempnum+1
end if
next
checkid=Tempnum
end function


%>
<script language=VBS>
sub subtree(Client_para)
if instr(Client_para,"|")=0 then exit sub
Myarray=split(Client_para,"|")
Mytext=eval("R" & Myarray(0) & ".innertext")
select case Mytext
case "+"
document.all.item("R" & Myarray(0)).innertext="-"
for i=1 to ubound(Myarray)
if eval("T" & Myarray(i) & ".summary")-eval("T" & Myarray(0) & ".summary")=1 then
document.all.item("T" & Myarray(i)).style.display="block"
end if
if eval("T" & Myarray(i) & ".summary")-eval("T" & Myarray(0) & ".summary")>1 then
document.all.item("T" & Myarray(i)).style.display="none"
end if
next
case "-"
document.all.item("R" & Myarray(0)).innertext="+"
for i=1 to ubound(Myarray)
if eval("T" & Myarray(i) & ".summary")-eval("T" & Myarray(0) & ".summary")>=1 then
document.all.item("T" & Myarray(i)).style.display="none"
if eval("R" & Myarray(i) & ".innertext")="-" then
document.all.item("R" & Myarray(i)).innertext="+"
end if
end if
next
end select
set Myarray=nothing
end sub

Sub document_onselectstart
document.selection.clear
End Sub

if isobject(eval("T1")) then
subtree document.all("T1").abbr
subtree document.all("T1").abbr
end if
</script>

</html>




laily 2003-06-18
  • 打赏
  • 举报
回复
功能最强大,使用最方便的JS目录树程序在这里(有示例和教程):
http://www.9499.net?go=tc
yegucheng 2003-06-16
  • 打赏
  • 举报
回复
自己加上图片就行了,Access数据库,代码如下:
<%@ Language=VBScript %>
<html>
<head>
<title>实例 多层目录显示</title>
</head>
<body><font size=+2><STRONG>多层目录显示</STRONG></font><P>
中国行政区
<%
dim conn
dim rstemp1,rstemp2
dim sqltemp1,sqltemp2
conn = "DBQ=" + server.mappath("genus.mdb") + ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
set rstmep1 = server.createobject("adodb.recordset")
set rstmep2 = server.createobject("adodb.recordset")
sqltemp1="select * from genus"
rstmep1.open sqltemp1, conn, 1, 1
%>
<%do while not rstmep1.eof%>
<DIV ID=Tree<%=rstmep1("id")%> CLASS="Folder">
<img ID="Tree<%=rstmep1("id")%>Fldr" src="picture/close.bmp"> <%=rstmep1("name")%>
</DIV>
<DIV ID=Tree<%=rstmep1("id")%>cont STYLE="display:none">
<%
set rstmep2 = server.createobject("adodb.recordset")
sqltemp2="select * from book where genus_id=" & rstmep1("id")
rstmep2.open sqltemp2, conn, 1, 1
%><table><%
do while not rstmep2.eof
%>
<tr><td>  <img src="picture/text.bmp"></td><td><%=rstmep2("name")%></td></tr>
<%
rstmep2.movenext
loop
%></table>
</DIV>
<%rstmep1.movenext
loop
rstmep1.close
rstmep2.close
%>
<SCRIPT LANGUAGE="VBScript">
Sub document_onClick()
If window.event.srcElement.className = "Folder" Then
strNode = window.event.srcElement.ID + "Cont"
strFldImg = window.event.srcElement.ID + "Fldr"
If document.All(strNode).style.display = "" Then
document.All(strNode).style.display = "none"
document.All(strFldImg).Src = "picture\close.bmp"
Else
document.All(strNode).style.display = ""
document.All(strFldImg).Src = "picture\open.bmp"
End If
End If
End Sub
</SCRIPT>
</td>
</tr>
</table>
<%
set rs1 = nothing
set rs = nothing
%>
</body>
</html>

数据库(两个表)



genus表:
id 自动编号
name 文本

1,"直辖市"
2,"自治区"
3,"特别行政区"
4,"省"


book表:
id 自动编号
name 文本
genus_id 数字

1,"北京市",1
2,"上海市",1
3,"天津市",1
4,"重庆市",1
5,"内蒙古自治区",2
6,"宁夏回族自治区",2
7,"广西壮族自治区",2
8,"新疆维吾尔族自治区",2
9,"西藏自治区",2
10,"香港特别行政区",3
11,"澳门特别行政区",3
12,"河北",4
13,"河南",4
14,"山东",4
15,"山西",4
16,"江苏",4
17,"安徽",4
18,"浙江",4
19,"海南",4

qjrein 2003-06-16
  • 打赏
  • 举报
回复
218.31.124.197/tree.rar
ajoy 2003-06-16
  • 打赏
  • 举报
回复
树型结构在ASP中的简单解决


  树型结构在我们应用程序中还是很常见的,比如文件目录,BBS,权限设置,部门设置等。这些数

据信息都采用层次型结构,而在我们现在的关系型数据库中很难清淅表达。那么要在程序中遇到树型

结构问题该如何处理呢?

  最近笔者通过一个ASP权限管理的程序轻松解决了一这问题,现在将其整理出来以飨读者。

  首先,要将层次型数据模型转化为关系型数据模型。也就是说如何在我们的ACCESS,SQL SERVER

,ORACLE等关系型数据库中设计这个数据结构。
  拿个实例来讲吧,譬如下面一个数据:

文档管理 1
|----新建文档 2
|----文档修改 3
|----文档归档 4
| |----查看归档信息 5
| |----删除归档信息 6
| | |----删除历史文档 7
| | |----删除正式文档 8
|----系统管理 9
|----用户管理 10
人事管理 11
行政管理 12
财务管理 13

  这是一个很典型的层次型结构数据,那么大家想一想,如何将其通过二维表的形式来表达呢?初

看上去很难,是吧。可是仔细推敲一番还是有门路可钻的。

  可以这样,将上面所有的权限视为一个权限字段,那么这个权限字段肯定是要有一个ID值的。我

们再给这个关系型数据表再强行加一个字段——隶属ID字段,也就是表明这个权限是属于哪一级权限

之下的,即这个ID值隶属于哪一个ID值。比如:“查看归档信息”权限ID值为“5”,它是隶属于“文

档归档”权限之下的,那么它的隶属ID字段的值就应该是“4”。OK,如果这一点能理解的话,那么我

们的关系转化工作也就算基本完成了。

  下面我们就开始设计这张关系型数据表(以Sql Server 7.0 为例):

+-----------+-----------+-----------+-----------+----------+
  | 字段名 | 字段含义 | 字段类型 | 字段大小 | 字段属性 |
+-----------+-----------+-----------+-----------+----------+
| SelfID | 权限ID | Int | 4 | PK |
| PowerName | 权限名  | Varchar | 50 | Not Null |
| PowerInfo | 权限信息 | Varchar | 500 | |
| BelongID | 隶属ID | Int | 4 | |
+-----------+-----------+-----------+-----------+----------+

  好了,结构设计好你就可以轻松输入你的测试数据了。

  然后,我们就针对如何在网页中模仿层次结构显示这功能的ASP程序,这也是最关键的一步了。

程序清单:powerlist.asp

<%
'数据库连接
set conn=Server.CreateObject("ADODB.Connection")
conn.open "driver={SQL Server};server=chaiwei;DATABASE=chaiwei;UID=sa;PWD="

'打开所有父层数据
set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "select * from powers where belongid is null order by powerid",conn,1,3

'层次数表态变量赋初值
format_i=1

'列表主程序段
do while not rs.eof

'打印父层数据信息
response.write "<a href='powerlist.asp?SelfID=" & rs("powerid") & "&BelongID=" & rs("belongid") & "'>" & rs("powername") & "</a>"
response.write "
"

'子程序调用,子层数据处理
Call ListSubPower(rs("powerid"))

rs.movenext

loop

'关闭父层数据集
rs.close
set rs=nothing


'子层数据处理子程序
Sub ListSubPower(id)

'打开隶属于上层 powerid 的所有子层数据信息
set rs_sub=Server.CreateObject("ADODB.Recordset")
rs_sub.Open "select * from powers where belongid=" & id & " order by powerid",conn,1,3

'列子层数据
do while not rs_sub.eof

'层次数表态变量递进累加
format_i=format_i+1

'循环缩进格式控制,因为顶层与二层不需要缩进,所以从第三层开始引用此程序段
for i=format_i to 3 step -1
response.write " |"
response.write " "
next

'打印子层数据信息
response.write " |----"
response.write "<a href='powerlist.asp?SelfID=" & rs_sub("powerid") & "&BelongID=" & rs_sub("belongid") &"'>" & rs_sub("powername") & "</a>"
response.write "
"

'递归调用子程序本身,对子层数据进行逐渐处理
ListSubPower(rs_sub("powerid"))

rs_sub.movenext

loop

'层次数表态变量递退累减
format_i=format_i-1

'关闭子层数据集
rs_sub.close
set rs_sub=nothing
End Sub
%>

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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