归递的显示问题,马上结帖!!!!!!!!!!!!!!!!!!!!!

pentium8285 2003-09-29 01:48:16
表结构如下:
+-----------+-----------+-----------+-----------+----------+
  | 字段名 | 字段含义 | 字段类型 | 字段大小 | 字段属性 |
+-----------+-----------+-----------+-----------+----------+
| PowerID | 权限ID | Int | 4 | PK |
| PowerName | 权限名  | Varchar | 50 | Not Null |
| PowerInfo | 权限信息 | Varchar | 500 | |
| BelongID | 隶属ID | Int | 4 | |
+-----------+-----------+-----------+-----------+----------+

<%
'数据库连接
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


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

'打印父层数据信息
Response.write "<option values='"&rs("PowerID")&"'>"&rs("PowerName")&"</option>"

'子程序调用,子层数据处理
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


'打印子层数据信息
Response.write "<option values='"&rs("PowerID")&"'>"&rs("PowerName")&"</option>"

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

rs_sub.movenext

loop

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


在select里如何显示结构为

部门1
部门1下属部门a
部门人员
部门1下属部门b
部门2

也就是说如何将输出的结果以树形显示!!
...全文
57 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sx1123 2003-09-30
  • 打赏
  • 举报
回复
<% @Language=VBScript %>
<% Option Explicit %>

<%
dim arr
dim intLength
dim intI,intJ,intN
dim arrValue,arrID,arrParentID,arrIndex,arrDepth
dim arrTemp
dim Counter
counter=0
arrValue=""
arrParentID=""
arrID=""
intLength = 13
redim arr(intLength),arrValue(intLength),arrID(intLength),arrParentID(intLength),arrIndex(intLength),arrDepth(intLength)
'arr(0) = value,ID,ParentID
'可以根据需要从数据库取出
arr(0) = ",-1,0"
arr(1) = "中国,1,10"
arr(2) = "江苏,2,1"
arr(3) = "上海,3,1"
arr(4) = "昆山,8,5"
arr(5) = "苏州,5,2"
arr(6) = "南京,6,2"
arr(7) = "杭州,7,4"
arr(8) = "浙江,4,1"
arr(9) = "舟山,9,4"
arr(10)="地球,10,0"
arr(11)="美国,13,10"
arr(12)="北京,11,1"
arr(13)="玉山镇,12,8"
for intI = 1 To intLength
arrTemp=split(arr(intI),",")
arrValue(intI)=arrTemp(0)
arrID(intI)=arrTemp(1)
arrParentID(intI)=arrTemp(2)
Next
dim intIndex,intDepth
intIndex=1
intDepth=1
For intI=1 to intLength
If cint(arrParentID(intI))=0 Then
arrIndex(intI)=cstr(intIndex)
intIndex=intIndex+1
arrDepth(intI)=cstr(intDepth)
Call setIndex(arrID(intI),intDepth)
End If
Next

sub setIndex(ID,Depth)
dim intJ
Dim Depth1
Depth1=Depth+1
for intJ=1 to intLength
If cint(arrParentID(intJ))=cint(ID) Then
arrIndex(intJ)=cstr(intIndex)
intIndex=intIndex+1
arrDepth(intJ)=cstr(Depth1)
call setIndex(arrID(intJ),Depth1)
End If
Next
End sub

dim Value,ID,ParentID,Depth
redim Value(intLength),ID(intLength),ParentID(intLength),Depth(intLength)

for intI=1 to intLength
for intJ=1 to intlength
if intI=cint(arrIndex(intJ)) Then
Value(intI)=""
for intN=2 to cint(arrDepth(intJ))
Value(intI)=Value(intI)&"<img src='line.gif'>"
Next
Value(intI)=Value(intI)&"<img src='midblk.gif'><img src='leaf.gif'>"&arrValue(intJ)
ID(intI) = arrID(intJ)
ParentID(intI)=arrParentID(intJ)
Depth(intI)=arrDepth(intJ)
Exit for
End If
Next
Next
%>
<HTML>
<HEAD>
<TITLE> Demo_Tree </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<link rel="stylesheet" href="style.css" type="text/css">
</HEAD>
<SCRIPT LANGUAGE="vbScript">
<!--
function show(ParentID,RowIndex)
dim intI
dim objRow
document.form1.Index.value=ParentID
if eval("document.form1.Flag"+cstr(RowIndex)).value="0" Then
call open(ParentID,RowIndex)
else
call close(ParentID,RowIndex)
end if
End function

sub open(ParentID,RowIndex)
for intI=1 to document.form1.length.value
if eval("document.form1.PID"+cstr(intI)).value=ParentID Then
set objRow = table1.rows(intI-1)
objRow.classname="show"
end if
Next
eval("document.form1.Flag"+cstr(RowIndex)).value="1"
end sub


sub close(ParentID,RowIndex)
dim intI
dim objRow
dim ID
for intI=1 to document.form1.length.value
if eval("document.form1.PID"+cstr(intI)).value=ParentID Then
set objRow = table1.rows(intI-1)
objRow.classname="unshow"
ID= eval("document.form1.ID"+cstr(intI)).value
call close(ID,RowIndex)
end if
Next
eval("document.form1.Flag"+cstr(RowIndex)).value="0"
End sub

function open_all()
dim intI
dim ID
for intI=1 to cint(document.form1.length.value)
ID= eval("document.form1.ID"+cstr(intI)).value
call open(ID,intI)
next
end function

function close_all()
dim intI
dim ID
for intI=1 to cint(document.form1.length.value)'
ID= eval("document.form1.ID"+cstr(intI)).value
call close(ID,intI)
next
end function
//-->
</SCRIPT>
<body oncontextmenu="JavaScrip:return false">
<form name="form1" id="form1">
<input type="button" name="openall" value=" + " class="button" onclick="vbscript:open_all()">
<input type="button" name="closeall" value=" - " class="button" onclick="vbscript:close_all()">
<table id="table1" border="0" cellspacing="0" cellpadding="0">
<%
for intI=1 to intLength
%>
<tr
<%
If cint(Depth(intI)) = 1 Then
Response.write "class='show'"
Else
Response.write "class='unshow'"
End If
%>

>
<td>
<div onmouseover="style.cursor='hand'" onclick="vbscript:show '<%=ID(intI)%>','<%=intI%>'">
<%=Value(intI)%> (ID=<%=ID(intI)%>)
</div>
<!--<input type=button name="showNext" class="button" value="+" onclick="vbscript:show '<%=ID(intI)%>','<%=intI%>'">-->
<input type="hidden" name="ID<%=intI%>" value="<%=ID(intI)%>">
<input type="hidden" name="PID<%=intI%>" value="<%=ParentID(intI)%>">
<input type="hidden" name="Flag<%=intI%>" value="0">

</td>
</tr>
<%
next
%>
</table>
<input type="hidden" name="length" value="<%=intLength%>">
<input type="" name="Index" value="">
</form>
</BODY>
</HTML>
happydayandday 2003-09-30
  • 打赏
  • 举报
回复
up一下,select实现的分层显示
pentium8285 2003-09-29
  • 打赏
  • 举报
回复
谢谢大家的帮助,问题解决了,我自己也想出来了,最后和Brookes(边走边唱)的差不多
不过有两个错误

levelBlank=levelBlank * " "

应该是&的吧,还有Response.write "<option values='"& levelBlank & rs("PowerID")&"'>"&rs("PowerName")&"</option>"
应该放在option标签之间吧,放在value里不起作用啊:)
总之谢谢大家,csdn就是csdn,给分
avonqin 2003-09-29
  • 打赏
  • 举报
回复
就是咯,根据层的个数,动态设定 的个数嘛,这不难吧
lions911 2003-09-29
  • 打赏
  • 举报
回复
很简单,我刚做过一个,不过声明一下:版权归ASP版版主ZOROU所有!自己改一下数据库就行


<%
blanks="  "
function searchtree(sID)
set rst1=server.CreateObject("adodb.recordset")
SQL1="select * from tree where parentid="&sID
rst1.open SQL1,conn,2,3
while not rst1.eof
blanks=blanks+" "
Response.Write "<option>"&blanks&rst1("name")&"</option>"
searchtree(rst1("ID"))
rst1.movenext
wend
blanks="  "
rst1.close
set rst1=nothing
end function

dim conn
set conn=server.createobject("adodb.connection")'建立连接对象
conn.Open "DSN=tree;uid=sa;pwd="
set rst=server.CreateObject("adodb.recordset")
SQL="select * from tree where parentid = 0"
rst.Open SQL,conn,2,3
'set rst=conn.Execute("select * from [tree] where parentid = 0")
%>
<select name="sel1">
<%
while not rst.EOF
Response.Write "<option>"&rst("name")&"</option>"
searchtree(rst("ID"))
rst.movenext
wend
rst.Close
set rst=nothing
conn.Close
set conn=nothing
%>
</select>
avonqin 2003-09-29
  • 打赏
  • 举报
回复
|——部门1
|——下属1
|员工1
|员工2
|——下属2
|员工a
|员工b
|——部门2
|——下属1
|员工1
|员工2
|——下属2
|员工a
|员工b

你是要这种结构么?如果不是,你给我们你的树形图看看呀;如果是,那我那个程序就可以了呀
Brookes 2003-09-29
  • 打赏
  • 举报
回复
在每个程序加入层信息
<%
'数据库连接
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


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

'打印父层数据信息
Response.write "<option values='"&rs("PowerID")&"'>"&rs("PowerName")&"</option>"

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

rs.movenext

loop

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

'调用过程--------------------------------------------------------------
Sub ListSubPower(id,level)
levelBlank=""
for i=0 to level
levelBlank=levelBlank * " "
next
'打开隶属于上层 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


'打印子层数据信息
Response.write "<option values='"& levelBlank & rs("PowerID")&"'>"&rs("PowerName")&"</option>"

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

rs_sub.movenext

loop

'关闭子层数据集
rs_sub.close
set rs_sub=nothing
End Sub
makay 2003-09-29
  • 打赏
  • 举报
回复
关注
pentium8285 2003-09-29
  • 打赏
  • 举报
回复
对啊,不是大家想的那么简单,输出的目录树是动态的,有n个层,问题是怎么实现n层的缩进》???
wangwm 2003-09-29
  • 打赏
  • 举报
回复
Response.write "<option values='"&rs("PowerID")&"'>  "&rs("PowerName")&"</option>"
关键是层树不同时如何控制> 的个数,


密切关注......
pentium8285 2003-09-29
  • 打赏
  • 举报
回复
拜托大家认真看看好吗?
pentium8285 2003-09-29
  • 打赏
  • 举报
回复
目录的层数是动态的,你怎么就知道只有两层,???
lovehwq21 2003-09-29
  • 打赏
  • 举报
回复
'打印子层数据信息
Response.write "<option values='"&rs("PowerID")&"'>"&rs("PowerName")&"</option>"
改为
'打印子层数据信息
Response.write "<option values='"&rs("PowerID")&"'>  "&rs("PowerName")&"</option>"
wangwm 2003-09-29
  • 打赏
  • 举报
回复
和我遇见了同样的问题
帮你顶
pentium8285 2003-09-29
  • 打赏
  • 举报
回复
倒,都没听明白吗?是在<option></option>里显示树形的结构!!!!
avonqin 2003-09-29
  • 打赏
  • 举报
回复
第一级:
Response.write "<option values='"&rs("PowerID")&"'>"&rs("PowerName")&"</option>"
第二级:
Response.write "<option values='"&rs("PowerID")&"'>  "&rs("PowerName")&"</option>"
第三级:
Response.write "<option values='"&rs("PowerID")&"'>    "&rs("PowerName")&"</option>"
angelheavens 2003-09-29
  • 打赏
  • 举报
回复
规定相邻两层之间有几个空格
lang11zi 2003-09-29
  • 打赏
  • 举报
回复
up
pentium8285 2003-09-29
  • 打赏
  • 举报
回复
我想是在<option></option>之间加空格
bananasmiling 2003-09-29
  • 打赏
  • 举报
回复
Response.write "<option values='"&rs_sub("PowerID")&"'>"&rs_sub("PowerName")&"</option>"
输出的结果以树形显示:你怎么显示?如何显示?
加载更多回复(1)
2021已然来临,在此之际debug抽空撸了一套 类似“QQ空间”、“新浪微博”、“微信朋友圈”PC版的互联网社交软件系统,并将其录制成了视频,特此分享给诸位进行学习,以掌握、巩固更多的技术栈和项目、产品开发经验! 言归正常,下面以问答的方式重点介绍下本门课程/系统的相关内容!  (1)问题一:这是一门什么样的课程? 本门课程是一门项目实战课程,基于Spring Boot2.X开发的一款类似“新浪微博”、“QQ空间”、“微信朋友圈”PC版的互联网社交软件,包含完整的门户网前端 以及 后台系统管理端,可以说是一套相当完整的系统!,大纲图如下所示:  而整个系统的系统架构设计如下图所示(注意:该图表示的是整个系统架构将经历N个阶段的演进,目前初定是4个阶段的演进,分别是架构1.0、2.0、3.0、4.0 !)   (2)问题二:可以学到哪些技术? 本课程对应着系统架构1.0,即第一阶段,主要的目标在于实现一个完整的系统,可以学到的技术还是比较多的:Spring Boot2.X、Java基础、Java8、JUC、NIO、微服务、分布式、系统架构设计、SpringMVC、MySQL、Lucene、多线程、并发编程、Bootstrap、HTML5、CSS3、JQuery、AdminLTE、VUE、LayUI相关组件等等 从架构2.0,即第二阶段的内容(对应第2门课程)开始将慢慢融入更多地技术栈,用以解决更多的业务、性能和服务拆分等问题!本门课程是后续其他阶段对应的课程的奠基,因此如果想要学习后续架构2.0、3.0、4.0的演进,则必须得先学习本门课程!   (3)问题三:系统运行起来有效果图看吗?   (4)问题四:学习本课程之前有什么要求? 要求的话,主要有两点,一是要有一定的Spring Boot、MySQL 以及 Web开发基础;二是最好学过Debug录制的 “企业权限管理平台(Spring Boot2.X+Shiro+Vue)”项目实战课程,因为本门课程“仿微博系统全程实战”的后台管理正是基于 “企业权限管理平台”项目二次开发的,因此建议最好先撸了那个课程再来学习本门课程! 友情提示:“企业权限管理平台(Spring Boot2.X+Shiro+Vue)”项目实战课程的购买学习地址:https://edu.csdn.net/course/detail/25646  (TIP:可以考虑购买组合套餐课程哦,更加实惠!!!)  岁末将至,人心浮躁 当此之际,应当沉下心,摒弃浮躁 要相信技术是第一生产力 相信技术改变生活、技术成就梦想! 特别是那些即将在过完年准备跳槽面试的小伙伴,本系统将可以为你增添几分亮点!!!  寄语:购买本课程的小伙伴将可获得本课程完整的视频教程、系统源代码数据库、课件PPT以及其他相关的工具跟资料,还可以进专属技术交流群交流技术!!!

28,391

社区成员

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

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