我在作asp程序時經常遇到這種情況: 將數據庫中的數據(如所有雇員名)列在列表框中,程序要求進行選擇其中一項或多項提交到下一個頁面。 但麻煩的是如果數據(如雇員)過多,會給客戶的選擇帶來麻煩--要從很長的列表中進行數據定位。最好的解決方法是用戶在選擇前采用模糊查詢的方式進行數據定位,準確找出需要選擇的雇員名,再選擇、提交。 問題出現在我們程序員面前:如何不刷新頁面篩選從數據庫中篩選數據。本人的方法有兩種: 1、采用雙列表框的方法 2、采用XML方法 本文主要介紹第一種方法:采用雙列表框的方法 編程思想: 采用雙列表框,其中一個為隱藏狀態,另一個是顯示給用戶看的列表框。 程序開始將數據(如雇員姓名)分別裝進兩個列表框中,當用戶需要篩選雇員時首先將顯示列表框清空,再更據篩選條件將數據從隱藏列表框裝入顯示列表框中。 這樣即可實現不刷新頁面篩選數據庫中的內容。 實現: 下面以SQLSERVER為例,篩選NorthWind庫中Employees表的雇員名進行說明。
< html> < head> < title>不刷新頁面查詢的方法</title> < metahttp-equiv="Content-Type"content="text/html;charset=gb2312"> < /head> < scriptlanguage="javascript"> functionsearch_onclick(){ //得到篩選雇員的名字 searchtext=window.searchContent.value; //首先移除在所有查詢結果列表中的選項 j=searchObj.length; for(i=j-1;i>=0;i--) { searchObj.remove(i); } if(searchtext!=""){ //顯示符合篩選條件的雇員 j=searchSource.length; for(i=0;i<j;i++){ searchsource=searchSource.options(i).text; k=searchsource.indexOf(searchtext); if(k!=-1){ option1=document.createElement("option"); option1.text=searchsource; option1.value=searchSource.options(i).value; searchObj.add(option1); } } } else{ //如果沒有輸入查詢條件則顯示所有雇員 j=searchSource.length; for(i=0;i<j;i++){ searchsource=searchSource.options(i).text; option1=document.createElement("option"); option1.text=searchsource; option1.value=searchSource.options(i).value; searchObj.add(option1); } } } < /script> < bodybgcolor="#FFFFFF"text="#000000"> < % servername="wyb"'服務器名 user="sa"'用戶名 pw=""'用戶密碼 databasename="northwind"'數據庫名 setconn=server.CreateObject("adodb.connection") conn.Open"DRIVER=SQLServer;SERVER="&servername&";UID="&user&";pwd="&pw&";DATABASE="& databasename setrs=server.CreateObject("adodb.recordset") sql="Selectemployeeid,lastnamefromemployeesorderbyemployeeid" rs.Opensql,conn%> < tablewidth="80%"border="1"> < tr> < td> < inputtype="text"name="searchContent"> <i nputtype="button"name="Button"value="查 詢"onclick="javascript:returnsearch_onclick()"> < /td> < /tr> < tr> < td>查詢結果<br> < selectname="searchObj"size="10"> < %dowhilenotrs.eof%> < optionvalue="<%=rs("employeeid")%>"><%=rs("lastname")%>< /option> < %rs.movenext loop % > < /select> < selectname="searchSource"size="10"style="display:none"> < % rs.movefirst dowhilenotrs.eof%> < optionvalue="<%=rs("employeeid")%>"><%=rs("lastname")%></option> < %rs.movenext loop % > < /select> < /td> < /tr> < /table> < %rs.close setrs=nothing % > < /body> < /html>
注意:文章中HTML代碼要取掉標簽< >中增加的空格。
|