我在作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(){
file://得到篩選僱員的名字
searchtext=window.searchContent.value
file://首先移除在所有查詢結果清單中的選項
j=searchObj.length;
for(i=j-1;i>=0;i--)
{
searchObj.remove(i);
}
if(searchtext!=""){
file://顯示符合篩選條件的僱員
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{
file://如果沒有輸入查詢條件則顯示所有僱員
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">
<inputtype="button"name="Button"value="查 詢">
</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>