当前位置:首页>>开发编程>>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>


文章来源:
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我