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();
    }

任何帮助将非常感激。

4

2 回答 2

0

您应该将项目添加为 DataRows。相反,您正在从其中一列中提取值:

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

然后您正确设置了 DisplayMember 和 ValueMember,但是,这没有任何效果,因为您错误地添加了项目。

于 2012-07-29T15:39:10.477 回答
0

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

您想如何获取组合框的选定 ID?
您打算将该 ID 用于什么目的?

我认为您应该在这里更清楚地描述您的实际问题。因为,代码对我来说似乎工作正常。

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

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

于 2012-07-29T16:02:03.877 回答