【问题标题】:autocomplete textbox from the database数据库中的自动完成文本框
【发布时间】:2012-01-19 12:45:07
【问题描述】:

我需要我的文本框在用户键入时自动完成。该值应来自数据库。 我正在使用文本框的 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();
}

但我没有得到想要的结果。 有什么想法吗?

【问题讨论】:

  • 好密码:#1cub3123*。感谢分享。
  • 这是一个 ASP.NET 应用程序、WPF、WinForms 吗???请提供更多信息
  • 您应该将所有 3 个 conn、com 和 dr 包装在 using 语句中。
  • @asifa 请将 asp-net 标签添加到您的问题中
  • 伙计们,仅仅因为有人发送了密码并不意味着我们需要重申它或对黑客进行攻击。你应该做正确的事情并编辑帖子——这将是正确的事情。据我们所知,这可能是一个内部 sql 服务器,对外部世界没有任何权利——当它不在网络上时不容易被黑客入侵。来吧伙计们。

标签: c#


【解决方案1】:

您是否考虑过使用 jquery ui 自动完成组件?您可以将其连接到远程数据源

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

【讨论】:

  • 我希望从数据源中填充数据。我正在使用分贝的两列。用户可以在文本框中输入区域或邮政编码,并应显示相关的自动完成选项。
  • 这是可行的,因为可以从远程数据源填充组件
  • 你能告诉我怎么做吗?
  • jquery ui 网站上的文档非常好,您应该从那里开始。您需要提供一个服务/端点,该服务/端点可以为组件提供 JSON 格式所需的数据。
【解决方案2】:

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

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

【讨论】:

  • 我希望从数据源中填充数据。我正在使用分贝的两列。用户可以在文本框中输入区域或邮政编码,并应显示相关的自动完成选项。
  • 我想第一个链接很好地解释了如何做到这一点。要检索信息,请更改 FetchEmailList 方法(当然还有它的名称)以调用您的数据库。然后,创建一个对象来存储信息并将文章中的 Employee 类替换为这个全新的对象。
  • 不改变方法是不行的,因为第一篇文章的方法和你的不一样。本文创建了一个服务来返回要由 jquery 使用的数据(客户端上的 javascript)。您的代码正在使用代码隐藏来更改服务器端的 html。
【解决方案3】:
  1. 切勿将您的连接字符串放在任何论坛上
  2. 使用 AJAX,否则每次用户键入字符时您都必须回发页面。 JQuery 和JQueryUI 为自动完成功能提供了简单的支持。
  3. 使用Telerik RadCombo(但需要购买许可证)

编辑:

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

【讨论】:

  • 感谢您的建议。如何在asp.net中编写源参数,以便它可以从数据库中获取值。
【解决方案4】:

您正在从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 选择以用户迄今为止输入的字符开头的区域和代码。这是我根据您的 cmets 对其他答案的看法。我还将 while 循环更改为和 if 块,因为我可以看到您为什么要分配然后将值重新分配给 zipcode.Text 属性(如果您要附加到 List 控件,我可以理解)。

【讨论】:

  • 您好,谢谢,但是数据库中的整个值都打印在文本框中,我希望它显示在文本框下方,用户可以像普通的自动完成一样选择它。怎么办?
  • 您使用的是标准的 ASP.NET TextBox 控件吗?如果是这样,我不确定您如何为其自动完成或它是否支持自动完成。到目前为止,您唯一可以从我的回答中得到的就是改进的 SQL 语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 2011-09-14
  • 1970-01-01
相关资源
最近更新 更多