要实现的功能:
1.使用VS2008新建一个网站(VS2005新建AJAX网站)
然后再默认Default.aspx页面添加ToolkitScriptManager或ScriptManager控件,然后添加文本框和自动完成控件AutoCompleteExtender,文本框的属性记得设置AutoPostBack为true(自动回发).
<% @ Register assembly = " AjaxControlToolkit " namespace = " AjaxControlToolkit " tagprefix = " cc1 " %>
<! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head runat = " server " >
< title ></ title >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div >
< asp: TextBox ID = " TextBox1 " runat = " server "
style = " width: 128px " Width = " 400px " AutoPostBack = " True " ></ asp:TextBox >
< cc1: AutoCompleteExtender ID = " TextBox1_AutoCompleteExtender " runat = " server "
TargetControlID = " TextBox1 " ServicePath = " WebService.asmx " CompletionSetCount = " 10 " MinimumPrefixLength = " 1 " ServiceMethod = " GetTextString " >
</ cc1:AutoCompleteExtender >
< cc1: ToolkitScriptManager ID = " ToolkitScriptManager1 " runat = " server " >
</ cc1:ToolkitScriptManager >
</ div >
</ form >
</ body >
</ html >
2.自动完成控件属性:
AutoCompleteExtender控件的属性:
(1).TargetControlID:指定将被辅助完成自动输入的控件ID,这里的控件只能是TextBox;
(2).ServicePath:指出提供服务的WEB服务路径,若不指出则ServiceMethod表示本页面对应的方法名;
(3).ServiceMethod:指出提供服务的方法名;
(4).MinimumPrefixLength:指出开始提供提示服务时,TextBox控件应有的最小字符数,默认为3;
(5).CompletionSetCount:显示的条数,默认为10;
(6).EnableCaching:是否在客户端缓存数据,默认为true;
(7).CompletionInterval:从服务器读取数据的时间间隔,默认为1000,单位:毫秒。
3.新建WebService.asmx Web服务
webservice.asmx是web服务的页面文件,代码文件默认放置在app_code中(webservice.cs) 代码如下:
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;
using System.Data;
using System.Collections;
/// <summary>
/// WebService 的摘要说明
/// </summary>
[WebService(Namespace = " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService] //不要遗忘掉了取消注释
public class WebService : System.Web.Services.WebService {
public WebService()
{
// 如果使用设计的组件,请取消注释以下行
// InitializeComponent();
}
private string [] autoCompleteWordList = null ; // 保存获取的内容
[WebMethod]
public string [] GetTextString( string prefixText, int count)
// string prefixText, int count 两个参数必须原封不动照写,包括大小写也是一样 返回参数只能是字符串数组
// prefixText表示用户输入的前缀,count表示返回的个数
{
if ( string .IsNullOrEmpty(prefixText) == true )
return null ;
if (autoCompleteWordList == null )
{
SqlConnection connection = new SqlConnection( " server=.;database=buty_DB;uid=sa;pwd=123456 " );
connection.Open();
SqlDataAdapter mydata = new SqlDataAdapter( " select pro_CompanyName from dbo.buy_CompanyInfo " , connection);
DataSet ds = new DataSet();
mydata.Fill(ds);
string [] temp = new string [ds.Tables[ 0 ].Rows.Count]; // 临时数组
int i = 0 ;
foreach (DataRow dr in ds.Tables[ 0 ].Rows)
{
temp[i] = dr[ " pro_CompanyName " ].ToString();
i ++ ;
}
Array.Sort(temp, new CaseInsensitiveComparer());
autoCompleteWordList = temp; // 临时数组赋值给刚刚前面申明的数组
if (connection.State == ConnectionState.Open)
connection.Close();
}
// 定位二叉树起点
int index = Array.BinarySearch(autoCompleteWordList, prefixText, new CaseInsensitiveComparer());
if (index < 0 )
{
index = ~ index; // 修复起点
}
// 搜索符合条件的数据
int matchCount = 0 ;
for (matchCount = 0 ; matchCount < count && matchCount + index < autoCompleteWordList.Length; matchCount ++ )
{
if (autoCompleteWordList[index + matchCount].StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase) == false )
{
break ;
}
}
// 处理搜索结果
string [] matchResultList = new string [matchCount];
if (matchCount > 0 )
{
Array.Copy(autoCompleteWordList, index, matchResultList, 0 , matchCount);
}
return matchResultList;
}
}
添加完代码记得返回设置AutoCompleteExtender 控件的属性:ServicePath ServiceMothod(方法不要加小括号)
注意: 1.由于该WEB服务是为Ajax框架提供服务的,因此在类声明之前得加上属性声明:
[System.Web.Script.Services.ScriptService]
2.特别需要注意的是GetTextString这个方法。凡是为AutoCompleteExtender控件提供服务的方法都必需完全满足以下三个条件:
A.方法的返回类型必需为:string [];
B.方法的传入参数类型必需为:string , int;
C.两个传入参数名必需为:prefixText , count。