从数据库中自动完成文本框

时间:2012-01-19 12:45:07

标签: c#

我需要在用户输入时自动填充文本框。该值应来自数据库。 我正在使用文本框的textchange属性。

protected void autocomplete(object sender, EventArgs e)
{
    string query = "Select area,codes from tbl_pincode";
    SqlConnection conn = new SqlConnection("Data Source=win2008-2;Initial       Catalog=h1tm11;User ID=sa;Password=#1cub3123*;Persist Security Info=True;");
    SqlCommand com = new SqlCommand(query, conn);
    conn.Open();
    SqlDataReader dr = com.ExecuteReader();
    while (dr.Read())
    {
        zipcode.Text = dr.GetValue(0).ToString();
    }
    conn.Close();
}

但我没有得到理想的结果。 任何想法如何去做?

4 个答案:

答案 0 :(得分:2)

你看过使用jquery ui自动完成组件吗?您可以将其连接到远程数据源

http://jqueryui.com/demos/autocomplete/

答案 1 :(得分:1)

您可以使用jQuery UI进行自动填充:http://www.dotnetcurry.com/ShowArticle.aspx?ID=515

ASP.NET自动完成的另一个选项是AjaxControlToolkit:http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/AutoComplete/AutoComplete.aspx

答案 2 :(得分:1)

  1. 永远不要将连接字符串放在任何论坛上
  2. 使用AJAX,否则每次用户输入字符时都必须回发页面。 JQuery& JQueryUI为自动填充功能提供了轻松支持。
  3. 使用Telerik RadCombo(但您需要购买许可证)
  4. 编辑:

    如果您选择使用JQueryUI自动完成,我将从remote JSONP示例开始。 您可以将自动填充功能url功能中的ajax来电的source属性指向您网页中的WebMethod。这将收到一个包含过滤器的对象(示例中为data),并以JSON格式从数据库返回所需的值(例如,参见this示例)

答案 3 :(得分:0)

您正在选择tbl_pincode表中的所有行,而不仅仅是那些与用户输入的字符匹配的行。然后,您将每行area列的值分配给zipcode.Text

也许试试:

protected void autocomplete(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(zipcode.Text))
        return;

    string query = @"
        SELECT area FROM tbl_pincode WHERE area LIKE @Value
        UNION 
        SELECT codes FROM tbl_pincode WHERE codes LIKE @Value";

    SqlConnection conn = null;
    SqlCommand com = null;
    SqlDataReader dr = null;
    try
    {
        conn = new SqlConnection("Data Source=win2008-2;Initial       Catalog=h1tm11;User ID=sa;Password=#1cub3123*;Persist Security Info=True;");
        com = new SqlCommand(query, conn);
        string value = string.Format("{0}%", zipcode.Text);
        com.Parameters.AddWithValue("@Value", value);
        conn.Open();
        dr = com.ExecuteReader();
        if (dr.Read())
        {
            zipcode.Text = dr.GetValue(0).ToString();
        }
    }
    finally
    {
        if (conn != null) conn.Dispose();
        if (dr != null) dr.Dispose();
        if (com != null) com.Dispose();
    }
}

SQL选择以用户目前输入的字符开头的区域和代码。根据您对其他答案的评论,我认为这是我的想法。我还将while循环更改为if块,因为我可以看到为什么要分配然后将值重新分配给zipcode.Text属性(我可以理解,如果你正在附加到List控件上。