真正實現(xiàn)兩個列表框動態(tài)關(guān)聯(lián)
時間:2005-05-29 16:35 來源:愛網(wǎng)無限 作者:未知 閱讀:次
想了好久得出的方法,想著很多人都為此問題得不到解決而苦惱,本著代碼共享的原則,現(xiàn)公布出來供大家指正(其實不說出來我也難受)。如果您覺得不錯請幫忙提提前,好讓更多的朋友看到。
此方法絕不是事先將所有記錄都寫入到頁面中再通過腳本過濾,那樣雖然簡單,但對于大的數(shù)據(jù)量顯然就不適合了,而且還嚴重浪費資源。
將下面的代碼稍作修改即可應(yīng)用于其它地方,非常方便。
為測試用,先建一名 Test.mdb 的 access2000 數(shù)據(jù)庫,建立兩個表 Type,Title,結(jié)構(gòu)如下:
Type
******************
ID 自動編號,主鍵
名稱 文本,長度合適
Title
********************
ID 自動編號,主鍵
類別 長整形數(shù)字,并聯(lián) Type 表的 ID 字段
標題 文本,長度合適
我們的目的是從 Type 表中讀取記錄并寫入到第一個列表框中,并在第一個列表框選擇時從 Title 表中過濾出相應(yīng)記錄寫入到第二個列表框中,并且可以隨時獲得第二列表框所選的值。
關(guān)鍵:在 B.asp 放置一隱藏域,來存放第二列表框所選的值,在 A.asp 中通過腳本來訪問該隱藏域的值來達到跨頁面讀取數(shù)值的目的。
'********************************************************
' conn.asp 連接數(shù)據(jù)庫,這里用 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 主頁面,內(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=""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 第二列表框所在頁面,內(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(""標題"") & ""</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>
此方法絕不是事先將所有記錄都寫入到頁面中再通過腳本過濾,那樣雖然簡單,但對于大的數(shù)據(jù)量顯然就不適合了,而且還嚴重浪費資源。
將下面的代碼稍作修改即可應(yīng)用于其它地方,非常方便。
為測試用,先建一名 Test.mdb 的 access2000 數(shù)據(jù)庫,建立兩個表 Type,Title,結(jié)構(gòu)如下:
Type
******************
ID 自動編號,主鍵
名稱 文本,長度合適
Title
********************
ID 自動編號,主鍵
類別 長整形數(shù)字,并聯(lián) Type 表的 ID 字段
標題 文本,長度合適
我們的目的是從 Type 表中讀取記錄并寫入到第一個列表框中,并在第一個列表框選擇時從 Title 表中過濾出相應(yīng)記錄寫入到第二個列表框中,并且可以隨時獲得第二列表框所選的值。
關(guān)鍵:在 B.asp 放置一隱藏域,來存放第二列表框所選的值,在 A.asp 中通過腳本來訪問該隱藏域的值來達到跨頁面讀取數(shù)值的目的。
'********************************************************
' conn.asp 連接數(shù)據(jù)庫,這里用 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 主頁面,內(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=""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 第二列表框所在頁面,內(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(""標題"") & ""</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>
(責(zé)任編輯:admin)
頂一下
(0)
0%
踩一下
(0)
0%
相關(guān)內(nèi)容
- ·如何將數(shù)據(jù)表導(dǎo)出備份到excel表格
- ·在表中用組合框選擇備選項目
- ·如何設(shè)置表的Caption和Description屬性
- ·用Access實現(xiàn)學(xué)校課程表的科學(xué)管理
- ·在表中設(shè)置美元等貨幣符號的方法
- ·Access建表需注意的問題(建表原則)
- ·Access獲取表下個自動增加的ID值【兩種
- ·Access光標在文本框的右邊
- ·Access格式、掩碼、文本有效性的異同
- ·access中的掩碼
- ·【技巧】Access時間函數(shù)匯總(一)
- ·Access隱藏表中的列
- ·Excel與Access簡便聯(lián)系方法
- ·Word文本文件導(dǎo)入到Access2007與導(dǎo)出的
- ·ACCESS字段中設(shè)置默認日期值函數(shù)大全
- ·ACCESS的真假:三、往一個表中插入10萬
最新內(nèi)容
推薦內(nèi)容