我正在使用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();
}
任何帮助都会非常感激。
答案 0 :(得分:0)
您应该将项目添加为DataRows。而是从一列中提取值:
ProductCombo.Items.Add( dt.Rows[i] );
然后正确设置DisplayMember和ValueMember,但是,由于您错误地添加了项目,因此无效。
答案 1 :(得分:0)
坦率地说,你需要更清楚地发布问题。
您希望如何获得所选组合框的ID?
您打算将该ID用于什么目的?
我认为你应该在这里更清楚地描述你的实际问题。 因为,代码似乎对我来说很好。
而且,顺便说一下,你实际上并不需要一个循环来设置组合框的数据项。您只需将组合的DataSource
属性分配给刚刚提取数据的DataTable。
ProductsComboBox.DataSource = dt
......工作得很好,你知道!
然后,您可以将DisplayMember
和ValueMember
设置为各自的列。