【问题标题】: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();
    }
}

【问题讨论】:

  • 您不应该在while (sdr.read()) 循环内关闭连接 - 将其移出循环
  • 这是大错特错
  • 嗨@tbhaxor 我会尝试阅读这个问题,看看它是否会回答我的问题。谢谢推荐!
  • 嗨@Quercus 谢谢你的小提示。非常感谢!

标签: c#


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多