想了好久得出的方法,想著很多人都為此問題得不到解決而苦惱,本著代碼共享的原則,現(xiàn)公布出來供大家指正(其實不說出來我也難受)。如果您覺得不錯請幫忙提提前,好讓更多的朋友看到。
此方法絕不是事先將所有記錄都寫入到頁面中再通過腳本過濾,那樣雖然簡單,但對于大的數(shù)據(jù)量顯然就不適合了,而且還嚴(yán)重浪費資源。
將下面的代碼稍作修改即可應(yīng)用于其它地方,非常方便。
為測試用,先建一名 Test.mdb 的 Access2000 數(shù)據(jù)庫,建立兩個表 Type,Title,結(jié)構(gòu)如下:
Type
******************
ID 自動編號,主鍵
名稱 文本,長度合適
Title
********************
ID 自動編號,主鍵
類別 長整形數(shù)字,并聯(lián) Type 表的 ID 字段
標(biāo)題 文本,長度合適
我們的目的是從 Type 表中讀取記錄并寫入到第一個列表框中,并在第一個列表框選擇時從 Title 表中過濾出相應(yīng)記錄寫入到第二個列表框中,并且可以隨時獲得第二列表框所選的值。
關(guān)鍵:在 B.asp 放置一隱藏域,來存放第二列表框所選的值,在 A.asp 中通過腳本來訪問該隱藏域的值來達(dá)到跨頁面讀取數(shù)值的目的。
'********************************************************
' conn.asp 連接數(shù)據(jù)庫,這里用 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 主頁面,內(nèi)嵌 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 第二列表框所在頁面,內(nèi)嵌于 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("標(biāo)題") & "</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>