ajax 架構autocompleteextender實現自動完成功能

來源:互聯網
上載者:User

ajax 架構autocompleteextender實現自動完成功能

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

ServicePath="WebService.asmx" 

ServiceMethod="GetWordList"

TargetControlID="txtText"

 

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

代碼如下:

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:顯示自動完成的行數;

一個詳細的執行個體

功能:

         可以輔助TextBox控制項自動輸入,如在google中搜尋時。

屬性:

         TargetControlID:指定將被輔助完成自動輸入的控制項ID,這裡的控制項只能是TextBox;

  ServicePath:指出提供服務的WEB服務路徑,若不指出則ServiceMethod表示本頁面對應的方法名;

  ServiceMethod:指出提供服務的方法名;

  MinimumPrefixLength:指出開始提供提示服務時,TextBox控制項應有的最小字元數,預設為3;

  CompletionSetCount:顯示的條數,預設為10;

  EnableCaching:是否在用戶端快取資料,預設為true;

  CompletionInterval:從伺服器讀取資料的時間間隔,預設為1000,單位:毫秒。

代碼執行個體:

 ASPX頁面代碼:

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>AutoComplete server control</title>

</head>

<body>

    <form id="form1" runat="server">

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

        <cc1:AutoCompleteExtender

            ID="AutoCompleteExtender1"

            runat="server"

            ServicePath="AutoComplete.asmx"           

            TargetControlID="TextBox1"            

            ServiceMethod="GetWordList"

            MinimumPrefixLength="1"

            EnableCaching ="true"

            CompletionSetCount="12"

            CompletionInterval="1000">                      

        </cc1:AutoCompleteExtender>

           

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

       

 

    </form>  

</body>

</html>

編寫相應的webservices

public class AutoComplete : System.Web.Services.WebService {

 

    public AutoComplete () {

 

        //Uncomment the following line if using designed components

        //InitializeComponent();

    }

 

    private static string[] autoCompleteWordList = null;

 

    [WebMethod]

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

    {

        if (autoCompleteWordList == null)

        {

            string[] temp = File.ReadAllLines(Server.MapPath("~/App_Data/words.txt"));

            Array.Sort(temp, new CaseInsensitiveComparer());

            autoCompleteWordList = temp;

        }

 

        int index = Array.BinarySearch(autoCompleteWordList, prefixText,

          new CaseInsensitiveComparer());

        if (index < 0)

        {

            index = ~index;

        }

 

        int matchingCount;

        for (matchingCount = 0;

             matchingCount < count && index + matchingCount <

             autoCompleteWordList.Length;

             matchingCount++)

        {

            if (!autoCompleteWordList[index +

              matchingCount].StartsWith(prefixText,

              StringComparison.CurrentCultureIgnoreCase))

            {

                break;

            }

        }

 

        String[] returnValue = new string[matchingCount];

        if (matchingCount > 0)

        {

            Array.Copy(autoCompleteWordList, index, returnValue, 0,

              matchingCount);

        }

        return returnValue;

    }

}

 

  在這裡需要注意以下幾點:

   1.由於該WEB服務是為Ajax架構提供服務的,因此在類聲明之前得加上屬性聲明:

     [System.Web.Script.Services.ScriptService]

   2.特別需要注意的是GetTextString這個方法。凡是為AutoCompleteExtender控制項提供服務的方法都必需完全滿足以下三個條件:

     A.方法的傳回型別必需為:string [];

     B.方法的傳入參數類型必需為:string  ,   int;

     C.兩個傳入參數名必需為:prefixText  ,  count。

在App_Data下添加words.txt。

access control list (ACL)

 

ADO.NET

 

aggregate event

 

alpha channel

 

anchoring

 

antialiasing

 

application base

 

application domain (AppDomain)

 

application manifest

 

application state

 

ASP.NET

 

ASP.NET application services database

 

ASP.NET mobile controls

 

ASP.NET mobile Web Forms

 

ASP.NET page

 

ASP.NET server control

 

ASP.NET Web application

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.