在Combobox窗体中获取所选项目的ID

时间:2012-07-29 15:26:31

标签: visual-studio-2010 c#-4.0

我正在使用C#windows窗体应用程序。我想在组合框中获取所选项目的ID。下面是我的代码。

  private void ProductForm_Shown(object sender, EventArgs e)
    {
        SqlCeConnection Connection = new SqlCeConnection(ConString);
        Connection.Open();
        SqlCeDataAdapter da = new SqlCeDataAdapter("Select * from CastingMaterial", Connection);
        DataTable dt = new DataTable();
        da.Fill(dt);
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            ProductsComboBox.Items.Add(dt.Rows[i]["PartName"]);

        }
        ProductsComboBox.DisplayMember = "PartName";
        ProductsComboBox.ValueMember = "PartId";
        Connection.Close();
    }

    private void ProductsComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        int ProductIndex = ProductsComboBox.SelectedIndex;
        string productName = ProductsComboBox.Text.ToString();
        int ProductId =Convert.ToInt32(ProductsComboBox.SelectedValue);
        SqlCeConnection Connection = new SqlCeConnection(ConString);
        Connection.Open();
        String Query = "SELECT * From CastingMaterial where PartId=@PartId";
        SqlCeDataAdapter da = new SqlCeDataAdapter(Query, Connection);
        da.SelectCommand.Parameters.AddWithValue("PartId", ProductId);
        DataSet ds = new DataSet();
        SqlCeCommandBuilder commandBuilder = new SqlCeCommandBuilder(da);

        BindingSource bsource = new BindingSource();

        da.Fill(ds, "CastingMaterial");
        bsource.DataSource = ds.Tables["CastingMaterial"];
        Productgv.DataSource = bsource;
        Connection.Close();
    }

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

您应该将项目添加为DataRows。而是从一列中提取值:

 ProductCombo.Items.Add( dt.Rows[i] );

然后正确设置DisplayMember和ValueMember,但是,由于您错误地添加了项目,因此无效。

答案 1 :(得分:0)

坦率地说,你需要更清楚地发布问题。

您希望如何获得所选组合框的ID?
您打算将该ID用于什么目的?

我认为你应该在这里更清楚地描述你的实际问题。 因为,代码似乎对我来说很好。

而且,顺便说一下,你实际上并不需要一个循环来设置组合框的数据项。您只需将组合的DataSource属性分配给刚刚提取数据的DataTable。

ProductsComboBox.DataSource = dt ......工作得很好,你知道! 然后,您可以将DisplayMemberValueMember设置为各自的列。