2013-04-03 219 views
0

我想填充我的文本框與我的數據庫中的值,所以當用戶從組合框中選擇一個老師的名字時,文本框將填充他們的聯繫人細節。這是迄今爲止的代碼。沒有錯誤,但是當我從組合框中選擇一個值時,文本框仍然是空白的。從組合框填充文本框的數據值從組合框#

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     MySqlConnection cs = new MySqlConnection(connectionSQL); 
     cs.Open(); 

     DataSet ds = new DataSet(); 

     MySqlDataAdapter da = new MySqlDataAdapter("Select * from Teacher WHERE name='" + comboBox1.Text + "'", cs); 

     MySqlCommandBuilder cmd = new MySqlCommandBuilder(da); 

     da.Fill(ds); 


     if (comboBox1.SelectedIndex > 0) 
     { 


      NameBox.Text = ds.Tables[0].Rows[0]["name"].ToString(); 
      AddressBox.Text = ds.Tables[0].Rows[0]["address"].ToString(); 

     } 

任何幫助或建議將不勝感激

+1

WinForms,WPF,ASP.NET? – Tim

回答

0

我不得不相信,根據你的代碼問題就出在這裏:

if (comboBox1.SelectedIndex > 0) 

,如果你只有一個項目在列表用戶選擇了第一項,查詢將運行,但文本框不會填充。

+0

我改變了代碼,現在它拋出了這個實例對象引用未設置爲對象的實例。我查了一下,看起來我的數據集是空的,即使所有的信息都是正確的 – user2187795

+0

@ user2187795,在哪一行?當你在調試器中時,下列哪一個是'null':NameBox,AddressBox,ds,Tables [0],[Row],[ 「name」]或者[Rows [0] [「address」]'? –

+0

@ user2187795,幫我一個忙,把你的'SELECT'語句改爲'SELECT name,address FROM Teacher WHERE'。 –

0

一些可能很容易丟失的東西,但是您是否確保連接字符串正確並且它正確連接到數據庫?

0
AddressBox.DataBind(); 
NameBox.DataBind(); 
+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – RononDex

+0

將值分配給文本框後,使用DataBind()方法將數據庫中的值綁定到文本框。 – Jegadeesh

0

你查詢數據庫驗證你所選擇的索引之前,您應檢查選定大於-1指數,不是0

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (comboBox1.SelectIndex < 0) 
    { 
     // Don't want to suffer database hit if nothing is selected 
     // Simply clear text boxes and return 
     NameBox.Text = ""; 
     AddressBox.Text = ""; 
    } 
    else 
    { 
     MySqlConnection cs = new MySqlConnection(connectionSQL); 
     cs.Open(); 

     DataSet ds = new DataSet(); 

     // You only need to select the address since you already have the name unless 
     // they are displayed differently and you want the database display to show 
     MySqlDataAdapter da = new MySqlDataAdapter("Select address from Teacher WHERE name='" + comboBox1.Text + "'", cs); 

     MySqlCommandBuilder cmd = new MySqlCommandBuilder(da); 

     da.Fill(ds); 

     NameBox.Text = comboBox1.Text; 
     AddressBox.Text = ds.Tables[0].Rows[0]["address"].ToString(); 
    } 
} 

而且,如果顯示的名稱在組合框中比在數據庫中以一種容易錯過的方式不同,例如名字和姓氏之間的額外空間或其他難以明顯檢測的空間,這可能導致查詢不匹配。