在Web界面下数形目录显示程序(版本1.0)

目前该程序已在软件中使用,效果很好!
在这里公布了两个适用不同情况的两个版本


版权申明:


如果您要把它用于个人的学习与研究,本人欢迎!但如果用于商业用途,请与本人联系


taojianbo@263.net


------------------------------


<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<SCRIPT LANGUAGE=javascript>
<!--// --------------------------Client Code Start-------------------------------
/*
''''''''''''''''''''''''''''''''''''''''''''''
''功能:树形结构的显示(树形菜单)
''说明:该程序容易理解,算法清晰,您只需使用,无需做什么修改就可以适用于各种环境
''使用中如遇问题,请与我联系
''Version 1.0
''作者:陶建波 taojianbo@263.net
''2001.9.15
''**NEW**2001.10.10陶建波
''性能评测:
''  以本程序所提供的算法,对处理少量的数据来说,是一种简单快捷的方法,但是如果是大量的数据呢
''比如:菘獾募锹即锏?k(千),1m(百万)会如何呢?如果是用来人口统计呢?
''假设树的平均层次为layer,记录数为n,则计算:
''文件大小:length=2000(附加的固定大小部分)+(layer*130+280+$)*n
'' $的大小有layer,n与实际情况决定,但一般大于100
''最后计算length,文件的大小可能是nk
''由此看来,该算法不适用与大的数据量的情况,请用户考虑好
''为了改变这种不利情况,最新的算法版本请见powertree.asp,该程序将在目前功能的基础上着重考虑性能问题
'''''''''''''''''''''''''''''''''''''''''''''''
*/
function showhide(objspan)
{
//显示,隐藏区域,达到菜单显示的目的
var temp;
 eval("temp=oSpan"+objspan+".style.display");
if(temp=="none")
{
 eval("oSpan"+objspan+".style.display='block'");
 eval("oImg"+objspan+".src='close.bmp'");
}
else
{
 eval("oSpan"+objspan+".style.display='none'");
 eval("oImg"+objspan+".src='open.bmp'");
}


}//end function


//-----------------------------Client Code End--------------------------
//-->
</SCRIPT>
<style type="text/css">
<!--
a:link {  font-size: 14px; text-decoration: none; color: #0000FF}
a:visited {  font-size: 14px; color: #0000FF; text-decoration: none}
a:hover {  font-size: 14px; color: #FF0000; background-color: #CCCC99; text-decoration: none}
a:active {  font-size: 14px; color: #FFFFFF; background-color: #191970; text-decoration: none}
.item{ font-size:14px}
-->
</style>
</HEAD>
<BODY leftmargin=0 rightmargin=0>
<table>
<tr><td valign=top>
<%
'''''''''''''''''''''''''''''''Server code start'''''''''''''''''''''''''''''''


dim layer,seqer,rowcount,colcount ''全局变量定义
 layer=0  '''树的层次计数器,初始化为0
 seqer=0  '''顺序号计数器,初始化为0
 rowcount=0 '''树组的第一维数
 colcount=0 '''树组的第二维数
function listchild(id)
''参数:树的根结点ID
''可变部分:
''erect.bmp,blank.bmp,link.bmp,line.bmp,open.bmp,close.bmp 各图片的
''说明:在本程序中作了这样的假设,你的树在数据库存储的方法为 tree{row_id,nodename,par_id,...}
''不要在未看清楚之前修改任何一条语句
''在代码中,在editable start 与editable end 之间的未可修改内容
''
''
 dim parid,i,blnchild,lastobji
 dim lastseqer
 lastobji=""  '本级的最后一个对象i值,初始化为空
 parid=id  '
 i=0    '基数0
 blnchild=false '该节点是否有子节点,初始化为false
 lastseqer=0  '上一个节点的顺序号,初始化为0,及
 
 while(i<rowcount)
  
  if(treedata(i,2)=parid) then
   lastobji=i   '
   if(seqer-lastseqer>1 and lastseqer<>0) then
    k=lastseqer+1
    Response.write("<script language=javascript>")
    while(k<seqer )
     Response.write("oerectImg"&layer&k&".src='erect.bmp';")
     k=k+1
    wend
    Response.Write("</script>")    
   end if
   j=0
   while(j<layer)
    Response.Write("<img id='oerectImg"&j&seqer&"' src='blank.bmp' border=0 align='absmiddle'>")
    '#b01# Response.Write("<img src='blank.bmp' border=0 align='absmiddle'>")  
    ''如果觉得垂直线之间的宽度小了,可以去掉#b01# ,#b02#两条语句的注释,同时也可以通过更改图片的大小以达目的    
    j=j+1
   wend
   
   Response.Write("<img id='olinkImg"&parid&i&"' src='link.bmp' border=0 align='absmiddle'>")
   '#b02# Response.Write("<img src='line.bmp' border=0 align='absmiddle'>")
   Response.Write("<img id='oImg"&parid&i&"' style='cursor:hand' src='open.bmp' border=0 align='absmiddle' οnclick=showhide('"&parid&i&"')>")
   ''''''''''''''''''''''editable start'''''''''''''''''''''''''''''''''''''''
   Response.write("<span class=item>&nbsp;</span><a href='view.asp?id="&treedata(i,0)&"' target='mainFrame' style=''>"&treedata(i,1)&"</a>")
   
   ''上面一行用户可以自行添加修改一满足实际情况。
   ''''''''''''''''''''''editable   end'''''''''''''''''''''''''''''''''''''''
   Response.Write("<br>")
   
   lastseqer=seqer  '取值在先,递加在后,其中lastseqer是局部变量,其值不会与seqer同步
   seqer=seqer+1  '顺序号加一
   layer=layer+1  '进入递归,层次layer加一
   Response.write("<span id='oSpan"&parid&i&"' style='display:none ' >")
   if(listchild(treedata(i,0))=false) then
    Response.write("<script language=javascript>oImg"&parid&i&".src='leaf.bmp';")
    Response.write("oImg"&parid&i&".οnclick='';")
    'Response.write("oImg"&parid&i&".style='cursor:nw-resize';")''改变光标类型
    Response.write("</script>")
   end if
   ''''如果没有下一级,则修改前面的图标为close.bmp
   Response.write("</span>")
   blnchild=true
  end if
  i=i+1
  
 wend
 if(lastobji<>"") then
  Response.write("<script language=javascript>olinkImg"&parid&lastobji&".src='lineleaf.bmp';</script>")
  
 end if
 layer=layer-1 '退出递归,层次减一
 listchild=blnchild '返回是否有子节点
end function
%> <%
 strconn="at"
 strsql="select * from tree"
 ''SQL 语句书写要求:在记录集的前嫒鲎侄伪匦胍来挝簉ow_id(惟一的主键)、name(菜单条显示的内容)、par_id(父节点row_id),其它根据需要输出与显示
set conn=server.createobject("ADODB.connection")
 conn.open strconn


set rs=server.createobject("ADODB.Recordset")
 rs.open strsql,conn,3,3
 rs.MoveFirst
%> <%
 rowcount=rs.RecordCount 
 colcount=3 '这个值根据实际情况设定
dim treedata,i,j
redim treedata(rowcount,colcount)
 rs.MoveFirst
 i=0
while(not rs.EOF)
 j=0
 while(j<colcount) 
  treedata(i,j)=rs.Fields(j).Value
  j=j+1
 wend
 rs.MoveNext
 i=i+1
wend
 rs.Close
set rs=nothing


'''''''初始化完毕数组


 Response.write("<span id='treeroot' style='display:block' border=0>")
 Response.Write("<bold>树形菜单演示程序</bold><br>")
 listchild("root")
 Response.write("</span>")
 
'''''''''''''''''''''''''''''''''''''''''Server Code END ''''''''''''''''''''''''''''''''''
%></td>
</tr></table>
</BODY>
</HTML>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值