ajaxControlToolkit---AutoCompleteExtender的简单用法

来源:互联网 发布:linux跟踪路由查看命令 编辑:程序博客网 时间:2024/05/22 03:09

昨天在搜索中使用了这个控件,不过不知道为什么在IE中反应比较慢

 

AutoCompleteExtender 自动完成扩展, 配合TextBox使用功能类似现在google中输入搜索字,则在TextBox下出来下拉框显示搜索目标中的项目

这个扩展控件需要配合Web Service使用,所以涉及了点web Service的使用(这里只简单谈下,等用熟了再仔细谈下web service的内容)

先介绍下AutoCompleteExtender的几个关键属性:

a,TargetControlID 这个属性是所有AjaxControlToolkit的共同属性,就是扩展目标控件ID(官方这么说的吧)

b.CompletionSetCount 这个属性是设置显示下拉结果的条数 默认为10吧

c.MinimumPrefixTextLength 这个属性是设置输入几个字符的长度后调用webService中的方法显示下拉列表

d.ServicePath  这个属性设置需要调用的web Service路径

e.ServiceMethod 这个属性设置需要调用的web Service中的方法(函数)

f.EnableCaching:是否在客户端缓存数据,默认为true

g.CompletionInterval:从服务器读取数据的时间间隔,默认为1000,单位:毫秒

 

注:如果习惯用可视控件设置属性,则a属性在AutoCompleteExtender中设置,其他属性则设置了TargetControlId后,在相应的TargetControl中会多出来个Extenders属性中设置,如果习惯手写代码,则在AutoCompleteExtender代码属性中设置。

 

例子:  1.新建一个页面,加入ScriptManager控件 一个TextBox控件 一个AutoCompleteExtender控件

           2.新建立一个webService,添加一个[WebMethod]方法

          

  1. [WebMethod]
  2.     public string[] GetString(string prefixText, int count){
  3.         System.Collections.Generic.List<string> list = new System.Collections.Generic.List<string>(count);
  4.         System.Data.DataSet ds = new System.Data.DataSet();
  5.         //这里是我在数据库中取数据的代码 其中SqlHelper类是项目中的取数据基类
  6.         //string strSql = string.Format("SELECT TOP {0} NAME FROM CengWei WHERE NAME LIKE '{1}%' ORDER BY NAME",count,prefixText);
  7.         //ds = SqlHelper.Query(strSql);
  8.         //for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
  9.         //{
  10.         //    list.Add(ds.Tables[0].Rows[i][0].ToString());
  11.         //}
  12.         for (int i = 0; i < count; i++)
  13.         {
  14.             list.Add(prefixText+i.ToString());
  15.         }
  16.         
  17.         return list.ToArray();
  18.     }

其中:必须在webService的类上面添加

[System.Web.Script.Services.ScriptService]

 

示例代码:webService是在数据库中的一个字段中取数据

 

页面代码:

 

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="test2.aspx.cs" Inherits="test2" %>
  2. <%@ Register Assembly="CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
  3.     Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
  4. <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6. <html xmlns="http://www.w3.org/1999/xhtml">
  7. <head runat="server">
  8.     <title>DropDownExtender简单练习</title>
  9.     <link href="/aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css"
  10.         rel="stylesheet" type="text/css" />
  11. </head>
  12. <body>
  13.     <form id="form1" runat="server">
  14.         <div>
  15.             <asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="True" EnableScriptLocalization="True">
  16.             </asp:ScriptManager>
  17.                     <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
  18.         <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
  19.         <cc1:AutoCompleteExtender ID="AutoCompleteExtender2" runat="server" MinimumPrefixLength="1"
  20.             ServiceMethod="GetString" ServicePath="AutoComplete.asmx" TargetControlID="TextBox2">
  21.         </cc1:AutoCompleteExtender>
  22.     </form>
  23. </body>
  24. </html>

webService代码:

 

 

  1. using System;
  2. using System.Web;
  3. using System.Collections;
  4. using System.Web.Services;
  5. using System.Web.Services.Protocols;
  6. /// <summary>
  7. /// AutoComplete 的摘要说明
  8. /// </summary>
  9. [WebService(Namespace = "http://tempuri.org/")]
  10. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  11. //下面是必须的,否则功能无法实现
  12. [System.Web.Script.Services.ScriptService]
  13. public class AutoComplete : System.Web.Services.WebService {
  14.     public AutoComplete () {
  15.         //如果使用设计的组件,请取消注释以下行 
  16.         //InitializeComponent(); 
  17.     }
  18.     [WebMethod]
  19.     public string HelloWorld() {
  20.         return "Hello World";
  21.     }
  22.     [WebMethod]
  23.     public string[] GetString(string prefixText, int count){
  24.         System.Collections.Generic.List<string> list = new System.Collections.Generic.List<string>(count);
  25.         System.Data.DataSet ds = new System.Data.DataSet();
  26.         //这里是我在数据库中取数据的代码 其中SqlHelper类是项目中的取数据基类
  27.         //string strSql = string.Format("SELECT TOP {0} NAME FROM CengWei WHERE NAME LIKE '{1}%' ORDER BY NAME",count,prefixText);
  28.         //ds = SqlHelper.Query(strSql);
  29.         //for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
  30.         //{
  31.         //    list.Add(ds.Tables[0].Rows[i][0].ToString());
  32.         //}
  33.         for (int i = 0; i < count; i++)
  34.         {
  35.             list.Add(prefixText+i.ToString());
  36.         }
  37.         
  38.         return list.ToArray();
  39.     }
  40.     
  41. }

有哪里不对的地方还请大家指教