2013-04-03 108 views
1

我無法從組合框中獲取值。我的目標是,當我在組合框中選擇一個項目時,它會在txtadres文本框中顯示客戶的地址。如何從組合框中獲取值

當我測試代碼時,它給出了一個空引用異常。

我也試過comboBox1.SelectedItem.ToString();但這也沒有效果。我不能使用comboBox1.Text,因爲顯示成員與值成員不同。顯示成員是客戶名稱,價值成員是客戶代碼。

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)   
{   
    string cs = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\Database1.accdb";   
    string cc = comboBox1.SelectedValue.ToString();   
    string sql = "SELECT * FROM Customers WHERE customercode = '" + cc + "'"; 

    using (OleDbConnection con = new OleDbConnection(cs)) 
    { 

     if (cc == "") 
     { 
      txtadres.Text = "No address found!"; 
     } 
     else 
     { 
      OleDbCommand com = new OleDbCommand(sql, con); 
      con.Open(); 
      OleDbDataReader DB = com.ExecuteReader(); 
      if (!DB.Read()) 
       return; 

      txtadres.Text = DB["Adress"].ToString(); 
      con.Close(); 
     } 
    } 
} 

更新我發現sollution,這個工作對我來說:string cc = Convert.ToString(comboBox1.SelectedValue);

+0

你的問題更多的是如何填充組合框,[這個答案應該可以幫助你](http://stackoverflow.com/a/2424060/838807) – musefan

+0

在檢索所選項目的問題之外,你不應該使用內聯SQL。即使您使用WinForms而不是WebForms,這也會帶來相當嚴重的安全風險。你最好的選擇是接受這個值並將它傳遞給參數化存儲過程,除非你想使用某種形式的ORM。 – Jeff

回答

1

在組合框中SelectedItemListBoxItem,並在this MSDN page描述。

This MSDN page有關於ListBoxItem的方法和屬性的更多信息。

總之,雖然訪問的SelectedItem的文本,您將使用類似於下面的代碼:

string itemText = (comboBox1.SelectedItem.Content).ToString(); 

如果你的組合框的項目不只是文本,這將返回選定的對象(如無論它是什麼類)。如果它只是一個字符串,這會得到你的字符串。

請記住,SelectedItem可以爲空,所以您應該在使用前對它進行空檢查。

0

我不知道從哪裏開始說這個問題是誠實的,但是這裏的第一個主要問題是,你在每個索引變化上連接到數據庫,這是一個基本的否定。

您需要查看使用數據適配器將數據庫查詢的內容填充到DataTable對象中。然後,您可以將組合框的數據源設置爲DataTable。

從這裏,您可以爲組合框分配顯示& Value成員,並在Index中更改已捕獲的選定值,而無需調用數據庫。

這實際上是一個反思您的解決方案的問題。

0

我一直有組合框類似的挫折。這可能不是最好的,但這是我所做的:

((ComboBoxItem)ComboBox.SelectedItem).CustomerCode;

用您填充組合框的任何對象替換ComboBoxItem強制轉換。 當然,這隻有在你試圖訪問的項目中填充組合框時纔有效。