2011-06-14 128 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 

附:這是我第一次對我的解釋和錯誤的編碼後抱歉,但希望它有幫助