当前位置:首页>>开发编程>>ASP>>新闻内容
连动下拉菜单[数据库版]
作者: 发布时间:2003-10-7 14:37:01 文章来源:

    想了好久得出的方法,想着很多人都为此问题得不到解决而苦恼,本着代码共享的原则,现公布出来供大家指正(其实不说出来我也难受)。如果您觉得不错请帮忙提提前,好让更多的朋友看到。

    此方法绝不是事先将所有记录都写入到页面中再通过脚本过滤,那样虽然简单,但对于大的数据量显然就不适合了,而且还严重浪费资源。

    将下面的代码稍作修改即可应用于其它地方,非常方便。

    为测试用,先建一名 Test.mdb 的 Access2000 数据库,建立两个表 Type,Title,结构如下:
Type
******************
ID    自动编号,主键
名称  文本,长度合适

Title
********************
ID    自动编号,主键
类别  长整形数字,并联 Type 表的 ID 字段
标题  文本,长度合适

    我们的目的是从 Type 表中读取记录并写入到第一个列表框中,并在第一个列表框选择时从 Title 表中过滤出相应记录写入到第二个列表框中,并且可以随时获得第二列表框所选的值。

    关键:在 B.asp 放置一隐藏域,来存放第二列表框所选的值,在 A.asp 中通过脚本来访问该隐藏域的值来达到跨页面读取数值的目的。

'********************************************************
'  conn.asp   连接数据库,这里用 test.mdb 来作测试
'********************************************************
<%
   dim conn  
   dim connstr

   connstr="DBQ="+server.mappath("test.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
   set conn=server.createobject("ADODB.CONNECTION")
   conn.open connstr
%>

'********************************************************
'  A.asp   主页面,内嵌 B.asp(第二列表框在B.asp页面)
'********************************************************
<!--#include file="conn.asp"-->
<table>
<tr><td>
<form method="POST" action="">
<%
Dim I,FirstID
I=1
Set Rs= Server.CreateObject("ADODB.Recordset")
SQL="SELECT * FROM Type;"
RS.Open SQL,Conn,1,1
Response.Write "第一列表框 <select size='1' ID='A' name='A' OnChange='VBScript:ChangType'>"
DO While Not RS.Eof
Response.Write "<option value='" & RS("ID") & "'>" & RS("名称") & "</option>"
RS.MoveNext
Loop
Response.Write "</select>"
%>
<P>
<IFRAME HEIGHT="40" WIDTH="500" FRAMEBORDER=NO MARGINHEIGHT=0 SRC="B.asp?ID=1" ID="TitleFrame">
</IFRAME>
</P>
<P>
<input type='button' onclick='vbscript:Show.innerText="选择的值是:" & Document.Frames(0).Document.All.H.value' value='查看第二列表框所选值'>
</P>
</Form>
</td></tr>
<tr><td ID="Show">
</td></tr>
</table>

<Script Language=VBScript>
Sub ChangType
TitleFrame.Location.Replace("B.asp?ID=" & Document.All.A.Value)
End Sub
</Script>
<%
RS.Close
Set RS=Nothing
Conn.Close
Set Conn=Nothing
%>

'********************************************************
'  B.asp   第二列表框所在页面,内嵌于 A.asp
'********************************************************
<!--#include file="Conn.asp"-->
<%
 TypeID=Trim(Request.QueryString("ID"))
 Dim RS
 Set RS= Server.CreateObject("ADODB.Recordset")
 SQL="SELECT * FROM Title Where 类别=" & TypeID & ";"
 RS.Open SQL,Conn,1,1
 Response.Write "第二列表框 <select size='1' name='B' ID='B'  OnChange='H.value=this.options[this.selectedIndex].value'>"
 Do While Not RS.Eof
  Response.Write "<option value='" & RS("ID") & "'>" & RS("标题") & "</option>"
  RS.MoveNext
 Loop
  Response.Write "</select>"
 RS.Close
 Set RS=Nothing
 Conn.Close
 Set Conn=Nothing
%>
<input type="hidden" name="H">
<script Language="vbscript">
H.value=B.options(B.selectedIndex).value
</script>


最新更新
·数据库被挂马的ASP处理方法
·ASP快速获取远程文件大小的方
·用ASP屏蔽迅雷和旋风下载工具
·解决ASP中传送中文参数乱码的
·ASP+AJAX做类似Google的搜索
·ASP的一个非常棒的Debug类(
·ASP中常用的服务器检测源代码
·优化ASP中执行SQL效率的五个
·ASP种msxml3.dll 800c0005错
·挂QQ的ASP版本网页源代码
相关信息
放生
愚爱
够爱
触电
白狐
心跳
知足
犯错
降临
分爱
葬爱
光荣
画心
火花
稻香
爱得起
这种爱
大丈夫
花蝴蝶
二缺一
小酒窝
下雨天
右手边
安静了
棉花糖
明天过后
边做边爱
擦肩而过
没有如果
怀念过去
等一分钟
越来越爱
寂寞暴走
你的承诺
Nobody
我们都一样
永远在身边
天使的翅膀
原谅我一次
i miss you
原谅我一次
吻的太逼真
姑娘我爱你
做你的爱人
一定要爱你
飞向别人的床
爱上别人的人
感动天感动地
心在跳情在烧
不潮不用花钱
如何能把你忘记
即使知道要见面
爱上你是一个错
最后一次的温柔
爱上你是我的错
怎么会狠心伤害我
亲爱的那不是爱情
伤心时候可以听情歌
爱上你等于爱上了错
不是因为寂寞才想你