之前有需要這樣的功能,是用ajax的自動完成控件實現的,但是個人認爲封裝的東西並不好用,比如說上次的那個傳參數問題,所以有空閒的時候又看了jquery插件,感覺挺不錯,但是示例是php的,本人轉化爲。net的,可以對有需要的朋友作爲參考,其實也很簡單。
閒話少說,直接看代碼
首先引用jquery插件 插件可以去網上搜,
<style type="text/css">@import url("SuggestFramework.css");</style>
<style type="text/css">input { width: 200px; border: 1px solid #CCCCCC; }</style>
<script type="text/javascript" src="SuggestFramework.js"></script>
<script type="text/javascript">
window.onload = initializeSuggestFramework;
</script>
添加控件
<input id="example1" name="example1" type="text" action="Default.aspx" columns="2" capture="1" /><br />
1.action 必須。接受 GET 方式提交的數據,並返回相關 Javascript 數組的動態頁。
2.capture 如果返回的結果不止一列(比如本例中的單詞和中文意思),將要替換用戶輸入的那一列(從 1 開始算)。通常這個和數據庫字段相對應。可選,默認爲 1.
3.columns 下拉顯示的列數,比如本例中,按字母查詢單詞,並將中文意思顯示在右側。可選,默認爲 1.
4.delay 查詢延時,單位爲毫秒。較低的延時會得到更快的反應,但會加重服務器負擔。可選,默認爲 1000(1秒)。
5.heading 如果設爲 true ,第一個數組值將作爲不可選擇項(標題欄)。當有兩列或兩列以上數據時非常有用。可選,默認爲 false.
數據提交只需要兩個數據
1.type 輸入框的name
2.q 搜索關鍵字(默認UTF-8編碼)
前臺頁面已完成。
下面看後臺代碼
string p=Request["q"];
string p1 = Request["type"];
if (!string.IsNullOrEmpty(p))
{
System.Text.StringBuilder builder = new System.Text.StringBuilder();
builder.Append("new Array(");
string strconj = "server=.;database=huiben;uid=sa;pwd=";
SqlConnection con = new SqlConnection(strconj);
con.Open();
string sql = "select name,je from suggest where name like'" + p + "%'";
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataAdapter ad = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ad.Fill(ds);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
if (i != ds.Tables[0].Rows.Count - 1)
{
builder.AppendFormat("new Array(/"{0}/", {1}),", ds.Tables[0].Rows[i]["name"].ToString(), ds.Tables[0].Rows[i]["je"].ToString());
}
else
{
builder.AppendFormat("new Array(/"{0}/", {1})", ds.Tables[0].Rows[i]["name"].ToString(), ds.Tables[0].Rows[i]["je"].ToString());
}
}
builder.Append(")");
Response.Clear();
Response.Write(builder.ToString());
Response.End();
}
效果如圖所示: