真正实现两个列表框动态关联
时间:2005-05-29 16:35 来源:爱网无限 作者:未知 阅读:次
想了好久得出的方法,想着很多人都为此问题得不到解决而苦恼,本着代码共享的原则,现公布出来供大家指正(其实不说出来我也难受)。如果您觉得不错请帮忙提提前,好让更多的朋友看到。
此方法绝不是事先将所有记录都写入到页面中再通过脚本过滤,那样虽然简单,但对于大的数据量显然就不适合了,而且还严重浪费资源。
将下面的代码稍作修改即可应用于其它地方,非常方便。
为测试用,先建一名 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
Set conn = Server.CreateObject(""ADODB.Connection"")
connstr=""Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""+Server.MapPath(""/test.mdb"")
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=""22"" WIDTH=""300"" 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>
此方法绝不是事先将所有记录都写入到页面中再通过脚本过滤,那样虽然简单,但对于大的数据量显然就不适合了,而且还严重浪费资源。
将下面的代码稍作修改即可应用于其它地方,非常方便。
为测试用,先建一名 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
Set conn = Server.CreateObject(""ADODB.Connection"")
connstr=""Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""+Server.MapPath(""/test.mdb"")
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=""22"" WIDTH=""300"" 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>
(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
相关内容
- ·如何将数据表导出备份到excel表格
- ·在表中用组合框选择备选项目
- ·如何设置表的Caption和Description属性
- ·用Access实现学校课程表的科学管理
- ·在表中设置美元等货币符号的方法
- ·Access建表需注意的问题(建表原则)
- ·Access获取表下个自动增加的ID值【两种
- ·Access光标在文本框的右边
- ·Access格式、掩码、文本有效性的异同
- ·access中的掩码
- ·【技巧】Access时间函数汇总(一)
- ·Access隐藏表中的列
- ·Excel与Access简便联系方法
- ·Word文本文件导入到Access2007与导出的
- ·ACCESS字段中设置默认日期值函数大全
- ·ACCESS的真假:三、往一个表中插入10万
最新内容
推荐内容