在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