【问题标题】:Textbox autocomplete with mysql as database使用 mysql 作为数据库的文本框自动完成
【发布时间】:2011-09-14 13:59:51
【问题描述】:

我正在尝试使用下面的代码来自动完成文本框,但它给出了错误

ERROR :"Object reference not set to an instance of an object"

在这一行:

for (int count = 0; count < dt.Rows.Count; count++)

谁能帮帮我?

private void tbMemberName_TextChanged_1(object sender, EventArgs e)
{
    tbMemberName.AutoCompleteMode = AutoCompleteMode.Suggest;
    tbMemberName.AutoCompleteSource = AutoCompleteSource.CustomSource;
    AutoCompleteStringCollection namec = new AutoCompleteStringCollection();

    //string search ="%"+ tbMemberName.Text +"%";
    //string @Name = tbMemberName.Text; 
    String sql =
        @"SELECT DISTINCT(member_Firstname +''+ member_Lastname) AS Name FROM members WHERE Name  Like '%'+tbMemberName.Text+'%'";
    DataTable dt = MemberFormHelper.GetData(sql, mf);
    if (dt.Rows.Count >= 0)
    {
        for (int count = 0; count < dt.Rows.Count; count++)
        {
            namec.Add(dt.Rows[count][Name].ToString());
        }
    }
    tbMemberName.AutoCompleteCustomSource = namec;
}

【问题讨论】:

  • 您确定dt.Rows 不为NULL 吗?
  • dt 可能为空,这就是错误的原因

标签: c# mysql winforms autocomplete textbox


【解决方案1】:

我认为 DT 必须为空,它实际上是 for 循环上方的行失败

【讨论】:

    【解决方案2】:

    dt 是空的,prolly(除非你在你的表中有一个名为 'tbMemberName.Text' 的记录)......我猜是这样 - tbMemberNameTextBox,所以如果你正在尝试将其值传递给 sql 字符串而不是

    @"SELECT DISTINCT(member_Firstname +''+ member_Lastname) AS Name FROM members WHERE Name Like '%'+tbMemberName.Text+'%'";

    你必须写

    @"SELECT DISTINCT(member_Firstname +''+ member_Lastname) AS Name FROM members WHERE Name Like '%"+tbMemberName.Text+"%'";

    你刚才误用了引号。

    【讨论】:

    • 数据未在此语句处加载到名称集合中namecollection.Add(dt.Rows[0]["member_Firstname"].ToString());你能帮帮我吗
    • 所以你终于进入了for 循环。如果您仍在使用SELECT DISTINCT(member_Firstname +''+ member_Lastname) AS Name 语句dt.Rows[0]["member_Firstname"] 将失败。因为没有"member_Firstname" 列。您要寻址的列是“名称”(您提供的别名),因此请改用dt.Rows[0]["Name"]。如果还有问题,请发布您的新select 声明
    【解决方案3】:

    我根据 msdn microsoft 和 sir P.K. 的代码使用了这个代码。我认为你应该考虑这个

    首先我将这些代码插入到 form_load
    例如:

    this.cmbSchool.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    this.cmbSchool.AutoCompleteSource = AutoCompleteSource.CustomSource;
    

    为了在我的示例中访问 textchanged 属性,我使用了 comboBox 而不是 Textbox(我将它们插入到表单之外并将其用作通用 var 以便稍后由 combobox1_textchange 访问)

    AutoCompleteStringCollection collection = new AutoCompleteStringCollection();
    


    如果您使用的是 Mysql,我使用它(也插入到 form_load 中)将数据保存在集合中

            string querySelect = "SELECT * FROM tblschools";
            MySqlCommand commandSelect = new MySqlCommand(querySelect, connectionMain);
            MySqlDataReader reader = commandSelect.ExecuteReader();
            while (reader.Read())
            {
                string type = reader[1].ToString();
                cmbSchool.Items.Add(type); //data inserted in combobox list (dropdownstyle in c# dropdown) so that I can still type
                collection.Add(type); //data inserted in collection so that it will be autocomplete when you type keywords
            }
            reader.Close();
    

    那么最后一步是我在 cmbSchool_TextChanged 中插入了这段代码

    this.cmbSchool.AutoCompleteCustomSource = collection; //everytime you type it will initiate and gather data from the collection
    

    附:这是我第一次对我的解释和糟糕的编码表示抱歉,但希望它有所帮助

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 2017-12-21
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      相关资源
      最近更新 更多