C# 在带有数据库的组合框的C中选择索引值
我是c语言的新手,我有一个问题。 我想从组合框中选择一个值,它应该在标签中显示它的年龄 我所做的是:C# 在带有数据库的组合框的C中选择索引值,c#,C#,我是c语言的新手,我有一个问题。 我想从组合框中选择一个值,它应该在标签中显示它的年龄 我所做的是: public void FillCombo() { SqlDataAdapter adap = new SqlDataAdapter("Select * from customers",con); DataTable dt = new DataTable(); adap.Fill(dt);
public void FillCombo()
{
SqlDataAdapter adap = new SqlDataAdapter("Select * from customers",con);
DataTable dt = new DataTable();
adap.Fill(dt);
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd1 = new SqlCommand("Select * from customers where name=@name ", con);
cmd1.Parameters.AddWithValue("@name",comboBox1.SelectedItem));
int i= cmd1.ExecuteNonQuery();
if (i > 0)
{
SqlDataReader sqlrdr = cmd1.ExecuteReader();
while (sqlrdr.Read())
{
String age= sqlrdr["age"].ToString();
label1.Text = age;
}
}
else{
MessageBox.Show("no value");
}
con.Close();
}
它不显示任何值消息,即使数据库中有值。我能做什么?当您将数据源设置为DataTable时,组合框中的每个项目都是一个表。因此,组合框中已经有了当前客户的年龄信息。无需再次调用数据库 您只需要使用SelectedItem属性来检索有关年龄字段或数据源中存在的任何其他字段的信息
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataRowView rv = l.SelectedItem as DataRowView;
// For safety, always check for null.
// It is possible that SelectedIndexChanged
// will be called even when there is no selection in the combobox
if(rv != null)
{
label1.Text = rv["age"].ToString();
....
}
}
尝试此操作以获取索引、值和所选名称:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cmb = (ComboBox)sender;
int selectedIndex = cmb.SelectedIndex;
int selectedValue = (int)cmb.SelectedValue;
ComboboxItem selectedName = (ComboboxItem)cmb.SelectedItem;
}
SelectedIndex不是要用作@id的内容。它是所选内容的索引,而不是ValueMember。查看如何使用SelectedValue或SelectedItem。看起来您根本不应该在这里使用ExecuteOnQuery。不知道你为什么这样做,但是如果你必须从数据库中阅读你不应该阅读的内容,请参阅下面Steve的答案,然后使用ExecuteReader。当前我将始终等于零,因为您所做的只是选择数据,而不是修改数据。cmd1.Parameters。AddWithValue@name,comboBox1.Text@我编辑了Crowcoder,但这是我得到的System.ArgumentException:“从对象类型System.Data.DataRowView到已知托管提供程序本机类型的映射不存在。我建议您查看如何使用SelectedItem,因为您不能这样使用它。它是一个对象,您必须引用相应的属性。不管怎样,当你需要的时候,请记住这一点,但这次只看@Steve的答案。