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

我是c语言的新手,我有一个问题。 我想从组合框中选择一个值,它应该在标签中显示它的年龄

我所做的是:

 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的答案。