天天看點

使用AutoCompleteExtender實作自動完成

自動完成也不是什麼新技術了,在一些較好的網站上都能看到其應用,下面就把代碼貼出來(僅限跟我同一級别的菜鳥觀看……老鳥請路過……

使用AutoCompleteExtender實作自動完成

需要一個WebService 我也懶得改名子,就直接叫WebService.asmx; 為什麼要用WebService?  其實我也不太清楚,隻知道AutoCompleteExtender需要三個最為關鍵的屬性:

ServicePath="WebService.asmx" 

ServiceMethod="GetWordList"

TargetControlID="txtText"

如果知道這三個屬性的話,也許就清楚為什麼要用WebService了,ServicePath:就是WebService的路徑,ServiceMethod:WebService中的方法名稱,TargetControlID就是要對哪個控件實作自動完成效果(說的有點不清楚,但明白是什麼意思就行了);

代碼如下:

使用AutoCompleteExtender實作自動完成
使用AutoCompleteExtender實作自動完成

View Code

using System;

using System.Web.Services;

using System.Data;

using System.Data.SqlClient;

using CommonUtility;

namespace GridView入庫單管理

{

    /// <summary>

    /// WebService 的摘要說明

    /// </summary>

    [WebService(Namespace = "http://tempuri.org/")]

    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    [System.ComponentModel.ToolboxItem(false)]

    // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。

    [System.Web.Script.Services.ScriptService]

    public class WebService : System.Web.Services.WebService

    {

        [WebMethod]

        public String[] GetWordList(string prefixText, int count)

        {

            string sql = string.Format("select top {0} * from InBill where saleName like '%" + @prefixText + "%'", @count);

            SqlParameter[] paras = new SqlParameter[]

            {

                new SqlParameter("@prefixText",prefixText),

                 new SqlParameter("@count",count)

            };

            DataTable table = SQLHelper.GetDateSet(sql, CommandType.Text, paras);

            string[] arr = new string[table.Rows.Count];

            if (table != null)

                for (int i = 0; i < table.Rows.Count; i++)

                {

                    arr[i] = table.Rows[i]["saleName"].ToString();

                }

            }

            return arr;

        }

    }

}

SQL語句:在聲名方法的時候,Count就是為了這個時候用的,AutoCompleteExtender 中加上CompletionSetCount="5" 的時候, 就有用了,它是什麼意思?  他就是自動完成的時候,顯示多少條資料用的,如果不寫,預設是10;也就是說,下拉清單中會出現10條資料;如果定義完以後,在這裡就可以将Count傳進去了;

string sql = string.Format("select top {0} * from InBill where saleName like '%" + @prefixText + "%'", @count);

string[] arr = new string[table.Rows.Count];  //定義一個字元串類型的數組,讓他的長度等于我們查出來的table的行數;緊接着就要周遊table,把每行的資料都填充到數組中去;

 arr[i] = table.Rows[i]["saleName"].ToString();  saleName是資料庫中的字段名,你這裡綁定的是哪個字段,自動完成的時候就會顯示哪個字段的值;

Aspx頁面代碼片段:

   <asp:ScriptManager ID="ScriptManager1" runat="server" />

        <asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" MinimumPrefixLength="1"

            CompletionInterval="500" EnableCaching="false" ServiceMethod="GetWordList" ServicePath="WebService.asmx"

            TargetControlID="txtText" CompletionSetCount="5" />

        <asp:TextBox ID="txtText" runat="server"></asp:TextBox>

首先需要一個ScriptManager,這個是必須的,下面解釋一下AutoCompleteExtender中各個屬性的意思;

MinimumPrefixLength :  就是最小輸入幾個字元的時候彈出自動完成;

CompletionInterval:自動完成時間間隔;

EnableCaching:是否啟用緩存;

ServiceMethod:WebService中的方法名稱;

ServicePath:WebService路徑;

TargetControlID:綁定的控件;

CompletionSetCount:顯示自動完成的行數;

OK了,就這些代碼,其實很簡單,大家一起加油~    收工~~  晚安~

--