我需要在用户输入时自动填充文本框。该值应来自数据库。 我正在使用文本框的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();
}
但我没有得到理想的结果。 任何想法如何去做?
答案 0 :(得分:2)
你看过使用jquery ui自动完成组件吗?您可以将其连接到远程数据源
答案 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)
编辑:
如果您选择使用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控件上。