如何从SQL db添加组合框项?

时间:2013-11-22 14:30:28

标签: c# .net sql-server-express

我需要将项目添加到SQL db的组合框中。在我的表单中,我有1个组合框(对于项目)和1个textbox(对于值)。我需要从DB表中加载项目,并且应该根据组合框的值选择textbox的值。

例如:

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中的项目,但根据textbox中的选择,无法在combobox中显示价格值。

请帮帮我

3 个答案:

答案 0 :(得分:2)

试试这个

SqlCommand cmd = new SqlCommand("select price from tblbill where items=@price", 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来避免sql注入并使用execute scalar,因为你只想为所选产品获得一个价格

答案 1 :(得分:1)

如果要显示组合框中的选定项目价格。

试试这个:

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

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

ComboBox的SelectedText和Text属性之间的区别 n

来自MSDN的SelectedText属性

  

获取或设置在a的可编辑部分中选择的文本   组合框。

来自MSDN的Text属性

  

获取或设置与此控件关联的文本。

答案 2 :(得分:1)

以下示例并未完全解决您的问题,但是:

  • 显示使用一次性对象的适当方式,例如SqlConnectionSqlCommand
  • 表明您不需要加载数据集,在很多情况下,DataTable就足够了
  • 显示如何将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"));

    }

}