• AjaxToolKit学习笔记 之 AutoCompleteExtender


    1.功能描述

    AutoCompleteExtender控件可以辅助TextBox控件自动完成输入

    2.控件属性说明

    TargetControlID - 指定将被辅助完成自动输入的控件的ID,此处只能是TextBox.

    ServiceMethod - 指定在WebService中的用于提取数据的方法的名称.此方法必须严格遵守下面的签名:

    public string[] FindString(string prefixText, int count)
        {
            DataRow[] drs 
    = GetTownTable(prefixText);

            
    string[] array = new string[drs.Length];

            
    for (int i = 0; i < drs.Length; i++)
            {
                array.SetValue(drs[i][
    "city_value"].ToString(), i);
            }

            
    return array;
        }

    也就是说,方法名可以替换,但方法签名及类型都不能修改.

    ServicePath 提供服务的WebService的路径.若不指出则表示本页面ServiceMethod对应的方法名.

    MinimumPrefixLength  用来设置用户输入多少字符才会出现相应的提示信息,默认值为3..

    CompletionInterval  从服务器获取数据的时间间隔.单位是毫秒,默认值为1000ms.

    EnableCaching 用于指定是否提供客户端缓存数据的功能,默认为true.

    CompletionListItemCssClass 自动完成的下拉列表项的CSS样式. 

    CompletionListCssClass 自动完成的下拉列表的CSS样式. 

    <Animations> 指定自动完成下拉列表的显示/隐藏时的动画效果. 

    3.使用实例

    3.1 前端代码

    代码
    <div>
            
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            
    <ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="TextBox1" CompletionInterval="300"
             CompletionSetCount
    ="3" EnableCaching="true" MinimumPrefixLength="1" ServiceMethod="FindString" ServicePath="CityService.asmx">
            
    </ajaxToolkit:AutoCompleteExtender>
        
    </div>

    3.2 WebService 中的FindString方法:

    代码
    /// <summary>
        
    /// 构建区对应的下拉框的数据源.
        
    /// <remarks>
        
    /// 这里是手动创建了一个表格. 按实际情况,可以从数据库中取值
        
    /// </remarks>
        
    /// </summary>
        
    /// <returns></returns>
        public DataRow[] GetTownTable(string cityid)
        {
            DataTable dt 
    = new DataTable();
            DataColumn dc;
            DataRow dr;

            dc 
    = new DataColumn();
            dc.ColumnName 
    = "city_value";
            dc.DataType 
    = System.Type.GetType("System.String");
            dt.Columns.Add(dc);

            dc 
    = new DataColumn();
            dc.ColumnName 
    = "town_name";
            dc.DataType 
    = System.Type.GetType("System.String");
            dt.Columns.Add(dc);

            dc 
    = new DataColumn();
            dc.ColumnName 
    = "town_value";
            dc.DataType 
    = System.Type.GetType("System.String");
            dt.Columns.Add(dc);

            dr 
    = dt.NewRow();
            dr[
    "city_value"= "guangzhou";
            dr[
    "town_name"= "花都";
            dr[
    "town_value"= "huadu";
            dt.Rows.Add(dr);

            dr 
    = dt.NewRow();
            dr[
    "city_value"= "shengzhen";
            dr[
    "town_name"= "南山";
            dr[
    "town_value"= "nanshan";
            dt.Rows.Add(dr);

            dr 
    = dt.NewRow();
            dr[
    "city_value"= "nanchang";
            dr[
    "town_name"= "山青山";
            dr[
    "town_value"= "shanqingshan";
            dt.Rows.Add(dr);

            dr 
    = dt.NewRow();
            dr[
    "city_value"= "shangrao";
            dr[
    "town_name"= "余干";
            dr[
    "town_value"= "yugan";
            dt.Rows.Add(dr);

            dr 
    = dt.NewRow();
            dr[
    "city_value"= "taiyuan";
            dr[
    "town_name"= "杏花区";
            dr[
    "town_value"= "xinhuaqu";
            dt.Rows.Add(dr);

            dr 
    = dt.NewRow();
            dr[
    "city_value"= "xingtai";
            dr[
    "town_name"= "会宁镇";
            dr[
    "town_value"= "huining";
            dt.Rows.Add(dr);

            
    // DataRow[] drs = dt.Select("city_value='" + cityid + "'");
            DataRow[] drs = dt.Select("city_value like '" + cityid + "%'");
            
    return drs;
        }

     [WebMethod]
        
    public string[] FindString(string prefixText, int count)
        {
            DataRow[] drs 
    = GetTownTable(prefixText);

            
    string[] array = new string[drs.Length];

            
    for (int i = 0; i < drs.Length; i++)
            {
                array.SetValue(drs[i][
    "city_value"].ToString(), i);
            }

            
    return array;
        }

    4.试验过程中碰到的问题及原因

    4.1 在文本框中输入字符,并没有联想词组出现

    原因:在查询方法GetTownTable中,没有使用LIKE语句, 直接使用了=.

    5.总结

    5.1 方法签名是严格要求的

    5.2 方法要求返回的是一个string[].

    6. 参考文档

    http://www.asp.net/ajaxlibrary/act_AutoComplete.ashx

  • 相关阅读:
    [转]权限管理模型
    如何解决 “invalid resource directory name”, resource “crunch”
    Oracle ERP Interface堵住--Request Running too long time,查找Request执行的Sql
    【转】令人印象深刻的廣告詞
    【异常】SQL Server blocked access to STATEMENT OpenRowset/OpenDatasource
    你是喜欢一个人本身,还是
    关于Oracle 的安装记(不定期更新)
    kafka
    mysql去除换行和空格
    mysql 字段值拼接,同一字段循环拼接
  • 原文地址:https://www.cnblogs.com/msnadair/p/1733163.html
Copyright © 2020-2023  润新知