我在作ASP程序時經常遇到這種情況:
將數據庫中的數據(如所有雇員名)列在列表框中,程序要求進行選擇其中一項或多項提交到下一個頁面。
但麻煩的是如果數據(如雇員)過多,會給客戶的選擇帶來麻煩--要從很長的列表中進行數據定位。最好的解決方法是用戶在選擇前采用模糊查詢的方式進行數據定位,准確找出需要選擇的雇員名,再選擇、提交。
問題出現在我們程序員面前:如何不刷新頁面篩選從數據庫中篩選數據。本人的方法有兩種:
1、采用雙列表框的方法
2、采用XML方法
本文主要介紹第一種方法:采用雙列表框的方法
編程思想:
采用雙列表框,其中一個為隱藏狀態,另一個是顯示給用戶看的列表框。
程序開始將數據(如雇員姓名)分別裝進兩個列表框中,當用戶需要篩選雇員時首先將顯示列表框清空,再更據篩選條件將數據從隱藏列表框裝入顯示列表框中。
這樣即可實現不刷新頁面篩選數據庫中的內容。
實現:
下面以SQL Server為例,篩選NorthWind庫中Employees表的雇員名進行說明。
<Html>
<head>
<title>不刷新頁面查詢的方法</title>
<meta http-equiv="Content-Type" content="text/Html; charset=gb2312">
</head>
<script language="Javascript">
function search_onclick(){
//得到篩選雇員的名字
//www.knowsky.com
searchtext=window.searchContent.value;
//首先移除在所有查詢結果列表中的選項
//www.knowsky.com
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);
}
}
}
//www.knowsky.com
</script>
<body bgcolor="#FFFFFF" text="#000000">
<%
servername="wyb" '服務器名
user="sa" '用戶名
pw="" '用戶密碼
databasename="northwind" '數據庫名
set conn=server.CreateObject("adodb.connection")
conn.Open "DRIVER=SQL Server;SERVER="&servername&";UID="&user&";pwd="&pw&";DATABASE="&databasename
set rs=server.CreateObject("adodb.recordset")
sql="Select employeeid,lastname from employees order by employeeid"
rs.Open sql,conn%>
<table width="80%" border="1">
<tr>
<td>
<input type="text" name="searchContent">
<input type="button" name="Button" value="查詢" onclick="Javascript:return search_onclick()">
</td>
</tr>
<tr>
<td> 查詢結果<br>
<select name="searchObj" size="10">
<%do while not rs.eof%>
<option value="<%=rs("employeeid")%>"><%=rs("lastname")%></option>
<%rs.movenext
loop
%>
</select>
<select name="searchSource" size="10" >
<%
'www.knowsky.com
rs.movefirst
do while not rs.eof%>
<option value="<%=rs("employeeid")%>"><%=rs("lastname")%></option>
<%rs.movenext
loop
%>
</select>
</td>
</tr>
</table>
<%rs.close
set rs=nothing
%>
</body>
</Html>