2013-11-22 78 views
1

我需要將這些項目添加到組合框SQL db。在我的表單中,我有1個組合框(對於項目)和1個textbox(對於值)。我需要從數據庫表中加載項目,並且應該根據組合框的值選擇textbox的值。如何從SQL數據庫添加組合框項目?

例如:當選擇組合框的值時

combobox   textbox 
-------------------------- 
Items   price 
sss    100  
ddd    140 
fff    220 

的文本框的值應該被自動地選擇。

private void Form4_Load(object sender, EventArgs e) 
     { 
      con = new SqlConnection("data source=PC\\SQLEXPRESS;integrated security=true;Initial catalog=MyDB"); 
      BindData1(); 
} 
public void BindData1() 
     { 


      con.Open(); 
      string strCmd = "select Items from tblbill"; 
      SqlCommand cmd = new SqlCommand(strCmd, con); 
      SqlDataAdapter da = new SqlDataAdapter(strCmd, con); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 

      comboBox1.DisplayMember = "items"; 
      comboBox1.ValueMember = "items"; 
      comboBox1.DataSource = ds.Tables[0]; 

      comboBox1.Enabled = true; 

     } 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

      con.Open(); 
      string sel = comboBox1.SelectedItem.ToString(); 



      SqlCommand cmd = new SqlCommand("select price from tblbill where items=" + comboBox1.SelectedValue, con); 

      SqlDataReader dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       p = dr[0] as string; 
       //department = reader[1] as string; 

      } 

      textBox1.Text = p; 
      con.Close(); 
     } 

我的組合框裝滿物品從tblbill但不能根據combobox選擇在textbox顯示價格值。

請幫我

+0

'應該根據組合框的值來選擇文本框的值,你應該做的更清楚一些,可以從某些值的組合框中派生出來的文本框的相應值是多少?看起來你的代碼顯示你想從數據庫中獲得**相應的**值,對吧? –

+0

這是winforms嗎? –

+0

請勿重複使用連接對象。在'using'語句中使用它。 –

回答

1

如果您想要顯示從組合框中選擇的項目價格。

嘗試這個辦法:從MSDN

SqlCommand cmd = new SqlCommand("select price from tblbill where [email protected]", con); 
cmd.Parameters.AddWithValue("@itemname",ComboBox1.SelectedItem.ToString()); 

SqlDataReader dr = cmd.ExecuteReader(); 
      if(dr.Read()) 
      { 
       textBox1.Text= dr[0].ToString();     
      } 

組合框的SelectedText和文本屬性之間的區別ň

SelectedText財產

獲取或設置可編輯選擇的文本部分的 組合框。

而從MSDN

Text屬性

獲取或設置與此控件關聯的文本。

+0

嗨,感謝您的快速回復。我想知道在combobox中selectedvalue和selectedtext的區別。 cmd.Parameters.AddWithValue( 「@ ITEMNAME」,ComboBox1.SelectedText); – rebo

+0

@rebo:歡迎你:)看到我編輯的答案與差異部分:) –

+0

@rebo:SelectedText只給你選擇的文本部分(就像我們在MS字中做的選擇一樣)Text屬性給你實際的itemText Combobox –

2

嘗試這樣

SqlCommand cmd = new SqlCommand("select price from tblbill where [email protected]", conn); 
command.Parameters.AddWithValue("@price", comboBox1.SelectedValue.ToString()); 
//no need to use reader use 
var value= (int)cmd.ExecuteScalar();//set data type according to your use 
textBox1.Text = value.ToString(); 

製作使用的SqlParameter來avoide SQL注入和利用,你試圖讓只有一個價格,選擇產品

+0

{Value = comboBox1.SelectedValue}; – rebo

+0

在此行顯示錯誤。 – rebo

+0

@rebo =更新,你現在可以檢查... –

1

這下面的例子是執行標量不完全解決您的問題,但它:

  • 顯示適當的方式使用一次性物體,如SqlConnectionSqlCommand
  • 表明你並不需要加載數據集,數據表就足以在很多情況下
  • 展示如何綁定textbox數據

利用這一點,你可以想像,多麼容易將裝載另一個帶有單個記錄的DataTable並綁定它。或者你可以手動填充文本框。

另一個選項,這很有趣,是加載一個Dataset與兩個表 - 1組合查找和另一個實際數據。建立它們之間的關係並綁定控制。然後,每當您更改combobox中的值時,您都不必去數據庫。有時您需要刷新數據,但所有事情都會在客戶端上發生。

private void Form4_Load(object sender, EventArgs e) 
{ 
    con = new SqlConnection("data source=PC\\SQLEXPRESS;integrated security=true;Initial catalog=MyDB"); 
    BindData1(); 
} 

public void BindData1() 
{ 
    DataTable dt = null; 

    using (SqlConnection con = new SqlConnection("data source=PC\\SQLEXPRESS;integrated security=true;Initial catalog=MyDB")) 
    { 
     con.Open(); 
     string strCmd = "select Items from tblbill"; 
     using (SqlCommand cmd = new SqlCommand(strCmd, con)) 
     { 
      SqlDataAdapter da = new SqlDataAdapter(strCmd, con); 
      dt = new DataTable("TName"); 
      da.Fill(dt); 
     } 
    } 

    comboBox1.DisplayMember = "field1"; 
    comboBox1.ValueMember = "field2"; 
    comboBox1.DataSource = dt; 

    textBox1.DataBindings.Add(new Binding("Text", dt, "field3")); 

    } 

}