會員登錄 - 用戶注冊 - 網(wǎng)站地圖 Office中國(office-cn.net),專業(yè)Office論壇
當前位置:主頁 > 技巧 > Access技巧 > 數(shù)據(jù)表 > 正文

真正實現(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>

(責(zé)任編輯:admin)

頂一下
(0)
0%
踩一下
(0)
0%
發(fā)表評論
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴禁發(fā)布色情、暴力、反動的言論。
評價: