文本框中的自动完成文本
Posted
技术标签:
【中文标题】文本框中的自动完成文本【英文标题】:Autocomplete text in textbox 【发布时间】:2020-12-15 07:12:16 【问题描述】:每次我在文本框中输入一个字符时,文本框中都应该有一个关于以用户输入的字母开头的名称的建议。我将提供我尝试运行程序时发生的错误的图像
private void View_Load(object sender, EventArgs e)
string maincon = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
SqlConnection con = new SqlConnection(maincon);
string sqlquery = "select firstname from [dbo].[tbl_registerStudent]";
SqlCommand sqlcom = new SqlCommand(sqlquery, con);
con.Open();
SqlDataReader sdr = sqlcom.ExecuteReader();
AutoCompleteStringCollection autotext = new AutoCompleteStringCollection();
while (sdr.Read())
autotext.Add(sdr.GetString(0));
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteCustomSource = autotext;
con.Close();
【问题讨论】:
这能回答你的问题吗? Auto-Complete in textbox using data from a SQL Server database 您不应该在while (sdr.read())
循环内关闭连接 - 将其移出循环
这是大错特错
嗨@tbhaxor 我会尝试阅读这个问题,看看它是否会回答我的问题。谢谢推荐!
嗨@Quercus 谢谢你的小提示。非常感谢!
【参考方案1】:
从while
循环中移动con.Close()
。
while (sdr.Read())
autotext.Add(sdr.GetString(0));
con.Close();
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteCustomSource = autotext;
【讨论】:
谢谢@user2250152 这解决了我的问题! 哦,是的,谢谢。我是新人,这就是为什么我不知道要标记它有人回答了我的问题。再次感谢您 我认为只有第一行需要在循环内,其余的可以放在循环外。【参考方案2】:不要Close
手动,而是将IDisposable
包装成using
。要么
private void View_Load(object sender, EventArgs e)
AutoCompleteStringCollection autotext = new AutoCompleteStringCollection();
string maincon = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
using (SqlConnection con = new SqlConnection(maincon))
con.Open();
string sqlquery =
@"select firstname
from [dbo].[tbl_registerStudent]";
using(SqlCommand sqlcom = new SqlCommand(sqlquery, con))
using (SqlDataReader sdr = sqlcom.ExecuteReader())
while (sdr.Read())
autotext.Add(sdr.GetString(0));
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteCustomSource = autotext;
或者从 c# 8.0 开始你可以摆脱讨厌的...
:
private void View_Load(object sender, EventArgs e)
string maincon = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
using SqlConnection con = new SqlConnection(maincon);
con.Open();
string sqlquery =
@"select firstname
from [dbo].[tbl_registerStudent]";
using SqlCommand sqlcom = new SqlCommand(sqlquery, con);
using SqlDataReader sdr = sqlcom.ExecuteReader();
AutoCompleteStringCollection autotext = new AutoCompleteStringCollection();
while (sdr.Read())
autotext.Add(sdr.GetString(0));
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteCustomSource = autotext;
【讨论】:
以上是关于文本框中的自动完成文本的主要内容,如果未能解决你的问题,请参考以下文章