2011-06-14 131 views
0

我将尝试使用下面的代码做文本框自动完成,但它给该线路上的错误文本框自动完成与MySQL作为数据库

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; 
} 
+0

你确定'dt.Rows'不是NULL? – jao 2011-06-14 10:13:07

+0

'dt'可能为空,这就是为什么错误 – V4Vendetta 2011-06-14 10:14:54

回答

1

dt为空,prolly(除非u有一个纪录乌尔表具有以下名称“tbMemberName.Text “)......我想是这样的 - tbMemberName是一个TextBox,所以如果你想它的值传递给SQL字符串,而不是

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

u必须写

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

我刚刚误用了引号。

+0

数据没有加载到名称集合在此statementnamecollection.Add(dt.Rows [0] [“member_Firstname”]。ToString());你会帮我 – user682417 2011-06-14 11:42:26

+0

所以最后你在'for'循环中。如果你仍然在使用'SELECT DISTINCT(member_Firstname +''+ member_Lastname)AS Name'语句'dt.Rows [0] [“member_Firstname”]'将失败。因为没有“member_Firstname”列。列你想要解决的是“名称”(别名你给),所以改为使用'dt.Rows [0] [“名称”]'。如果在新的'select'语句后仍然有问题 – 2011-06-14 12:11:28

0

我觉得DT必须是null,且其实际上面的行for循环从而未能

1

我用这个代码基于msdn microsoft和先生P.K.的代码。我想你应该考虑这个

首先,我在Form_Load插入这些代码
例如:

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

要访问我的例子中框TextChanged属性我用组合框代替文本框(我插入他们的外部形式并用它作为通用变种由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 

附:这是我第一次对我的解释和错误的编码后抱歉,但希望它有帮助