首页 > 解决方案 > 在 C# 中使用带有数据库的组合框选择索引值

问题描述

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

即使我在数据库中有值,它也没有显示任何值消息。我能做些什么?

标签: c#

解决方案


当您将 DataSource 设置为 DataTable 时,组合框中的每个项目都是DataRowView。因此,您已经在组合框中获得了有关当前客户年龄的信息。无需再次调用数据库。

您只需要使用 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();
        ....
    }
}

推荐阅读