Ajax 中 AutoCompleteExtender 的使用

原文链接: http://www.cnblogs.com/liuzhiyi7288/archive/2009/03/17/1414610.html

在Ajax中 ,此控件的使用非常的普遍,尤其是用于做查询时非常的实用,下面看简单的例子,其中要注意几个细节,

实例:

1、建立一个ajax enable 的web site,在网站添加一个web 窗体;

2、在网页首页添加一个ScirptManager控件,用于注册ajax框架;

3、拖放一个textbox控件和AutoCompleteExtender控件,由于此控件要联合web service一起使用,下面建立web service

4、建立web service :在sln中添加一个新项 (web 服务),然后在cs文件后追加如下代码

    [WebMethod]
    public string[] GetProductsName(string prefixText, int count)
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
        SqlCommand command = new SqlCommand();
        command.Connection = con;
        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "sp_GetProductNamesByName";
        SqlParameter[] para = new SqlParameter[]
        {
            new SqlParameter("@productName",prefixText),
            new SqlParameter("@count",count)
        };
        command.Parameters.AddRange(para);
        SqlDataAdapter reader = new SqlDataAdapter(command);
        DataSet ds = new DataSet();
        reader.Fill(ds);
        List<string> names = new List<string>();
        foreach (DataRow row in ds.Tables[0].Rows)
        {
            names.Add(row[0].ToString());
        }
        return names.ToArray();
    }

主要要在类的上方添加特性[System.web.script.services.scriptService()],当然在此处还有另一种解决办法:

将现在目前有的三个特性删除,然后引用命名空间 System.Web.Script.Services;添加特性[ScriptService],效果是一样的,

其中在此注意方法的返回类型必须为String[]类型,方法必须有两个参数,参数名称和类型要和此实例中的一样(从此控件自动添加方法中去截取前两个就可以了),

一般情况下,第一个参数是用户输入的关键字,而第二个参数则是要求结果返回的条数,那么在此又要提到写这样的存储过程的要点,在此实例中的存储过程为:

if exists(select * from sysobjects where name='sp_GetproductNames')

drop proc sp_GetproductNames

go

create proc sp_GetproductNames

@productName varchar(50),

@count int

as

     EXEC('SELECT TOP '+@count+'[ProductName] FROM [Products] WHERE [ProductName] LIKE'+ '''%'+@productName+'%''')

go

在此注意,在存储过程中select top 后不能跟参数,所以为了实现功能,我们就用exec关键字,后面的连续几个‘(单引号) ,是因为在sql中两个’(单引号)表示一个单引号,而此字段又为varchar类型,所以会有三个连续的单引号。

另外,如果只在控件中用属性 CompleteSetCount 去限制,而存储过程没有限制的话,是没有用的,要前后一致就可以了。

5、配置AutoCompleteExtender控件,下面是配置代码:

ID="AutoCompleteExtender1"
         runat="server"
         TargetControlID="TextBox1"
         CompletionInterval="100"  //表示自动提示数据多长时间后显示
         CompletionSetCount="5"  //设置数据的条数
         EnableCaching="true"  //是否启用缓存
         Enabled="true"  //是否启用此控件
         FirstRowSelected="true"  //设置第一项是否被选中
         MinimumPrefixLength="1"  //设置用户输入几个字符后开始显示提示数据
         ServiceMethod="GetProductsName"  //显示数据要用到的web service 方法
         ServicePath="WebService/WebService.asmx"    //显示数据要用到的web service文件

6、在浏览器浏览此页,就O了,应该没有问题的。

转载于:https://www.cnblogs.com/liuzhiyi7288/archive/2009/03/17/1414610.html

猜你喜欢

转载自blog.csdn.net/weixin_30648587/article/details/94796377