C# 从组合框中获取所选值的ID

C# 从组合框中获取所选值的ID,c#,combobox,sqlconnection,C#,Combobox,Sqlconnection,我在选择员工时没有获取ID,消息框只显示姓名。。。有人能告诉我哪里是我的错吗?非常感谢您在对组合框进行数据绑定后,您可以通过使用数据读取器插入值来删除绑定。只需删除此部分: private void frmNSS5_Load(object sender, System.EventArgs e) { SqlConnection con; SqlCommand cmd; SqlDataReader dr; con = n

我在选择员工时没有获取ID,消息框只显示姓名。。。有人能告诉我哪里是我的错吗?非常感谢您

在对组合框进行数据绑定后,您可以通过使用数据读取器插入值来删除绑定。只需删除此部分:

    private void frmNSS5_Load(object sender, System.EventArgs e)
    {
        SqlConnection con;
        SqlCommand cmd;
        SqlDataReader dr;
        con = new SqlConnection(@"workstation id = PC-PC; user id=sa;Password=sapassword; data source=pc-pc; persist security info=True; initial catalog=CleanPayrollTest2");
        cmd = new SqlCommand("SELECT IsNull(ArEmpName,'') + ' ' + IsNull(ArFatherName,'') + ' ' + IsNull(ArLastName,'') as EmpName, ID as ID FROM [Emp] ", con);
        try
        {
            con.Open();
            dr = cmd.ExecuteReader();
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            this.cbEmpName.ValueMember = "ID".ToString();
            this.cbEmpName.DisplayMember = "EmpName";
            this.cbEmpName.DataSource = ds.Tables["EmpName"];
            while (dr.Read())
            {
                if(dr[0].ToString().Length > 0)
                {
                    this.cbEmpName.Items.Add(dr[0].ToString());
                }
            }
        con.Close();
        }
        catch
        {
            MessageBox.Show("Connection Failed");
        }

}
    private void comboEmpName_SelectedIndexChanged(object sender, System.EventArgs e)
    {

        MessageBox.Show("Emp ID:" + ' ' + this.cbEmpName.SelectedValue + ", " + "EmpName:" + ' ' + this.cbEmpName.SelectedItem   );
    }
如果要保留代码,应更改添加项目的行,使其同时包含值和显示数据:

while (dr.Read())
{
    if(dr[0].ToString().Length > 0)
    {
        this.cbEmpName.Items.Add(dr[0].ToString());
    }
}

在对组合框进行数据绑定后,可以通过使用数据读取器插入值来删除绑定。只需删除此部分:

    private void frmNSS5_Load(object sender, System.EventArgs e)
    {
        SqlConnection con;
        SqlCommand cmd;
        SqlDataReader dr;
        con = new SqlConnection(@"workstation id = PC-PC; user id=sa;Password=sapassword; data source=pc-pc; persist security info=True; initial catalog=CleanPayrollTest2");
        cmd = new SqlCommand("SELECT IsNull(ArEmpName,'') + ' ' + IsNull(ArFatherName,'') + ' ' + IsNull(ArLastName,'') as EmpName, ID as ID FROM [Emp] ", con);
        try
        {
            con.Open();
            dr = cmd.ExecuteReader();
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            this.cbEmpName.ValueMember = "ID".ToString();
            this.cbEmpName.DisplayMember = "EmpName";
            this.cbEmpName.DataSource = ds.Tables["EmpName"];
            while (dr.Read())
            {
                if(dr[0].ToString().Length > 0)
                {
                    this.cbEmpName.Items.Add(dr[0].ToString());
                }
            }
        con.Close();
        }
        catch
        {
            MessageBox.Show("Connection Failed");
        }

}
    private void comboEmpName_SelectedIndexChanged(object sender, System.EventArgs e)
    {

        MessageBox.Show("Emp ID:" + ' ' + this.cbEmpName.SelectedValue + ", " + "EmpName:" + ' ' + this.cbEmpName.SelectedItem   );
    }
如果要保留代码,应更改添加项目的行,使其同时包含值和显示数据:

while (dr.Read())
{
    if(dr[0].ToString().Length > 0)
    {
        this.cbEmpName.Items.Add(dr[0].ToString());
    }
}
试试这个

this.cbEmpName.Items.Add(
    new { EmpName = dr[0].ToString(), ID = dr[1].ToString()});
试试这个

this.cbEmpName.Items.Add(
    new { EmpName = dr[0].ToString(), ID = dr[1].ToString()});


什么是
“ID”.ToString()
?:d您正在选择id和名称,但您只在
中添加名称,而
中没有添加名称。您的
数据集
数据表
也未使用,并且
“ID”。ToString()
很有趣。您还应该对连接和数据读取器使用
using
-语句,以确保它们在异常情况下也得到处理(关闭)。很抱歉,Tostring东西是错误添加的。是的,现在我可以看到我正在编码的内容了。。非常感谢您,如果答案对您有效,请不要忘记将其标记为已接受。什么是
“ID”。ToString()
?:d您正在选择id和名称,但您只在
中添加名称,而
中没有添加名称。您的
数据集
数据表
也未使用,并且
“ID”。ToString()
很有趣。您还应该对连接和数据读取器使用
using
-语句,以确保它们在异常情况下也得到处理(关闭)。很抱歉,Tostring东西是错误添加的。是的,现在我可以看到我正在编码的内容了。。非常感谢,如果答案对您有效,请不要忘记将其标记为已接受…我将保留它,因为当我删除它时,我会得到一个空的组合框。。非常感谢您,如果您坚持使用DataReader,这就是方法。如果您选择dataadapter,您可以使用数据绑定。您认为它更好吗?在这种情况下,这并不重要。DataAdapter主要用于更新,而不是显示lookuplist。哦,我明白了。。很抱歉在这些问题上打扰您,但是如果您有时间,您能告诉我如果我不想在Combobox中设置ID,我只想将ID存储在一个变量中,以便以后使用它,该怎么办。。谢谢你的帮助我会保留它因为当我删除它的时候,我会得到一个空的组合框。。非常感谢您,如果您坚持使用DataReader,这就是方法。如果您选择dataadapter,您可以使用数据绑定。您认为它更好吗?在这种情况下,这并不重要。DataAdapter主要用于更新,而不是显示lookuplist。哦,我明白了。。很抱歉在这些问题上打扰您,但是如果您有时间,您能告诉我如果我不想在Combobox中设置ID,我只想将ID存储在一个变量中,以便以后使用它,该怎么办。。谢谢你的帮助对不起我的问题。。但是你说的数字4是什么意思?我想它必须是1。。我不确定它是否应该是3,因为ID是查询中的第4列,dr中的索引从0开始。您能帮我做一件事吗?我不想在组合框中显示ID,只想显示名称。。怎么做?对不起我的问题。。但是你说的数字4是什么意思?我想它必须是1。。我不确定它是否应该是3,因为ID是查询中的第4列,dr中的索引从0开始。您能帮我做一件事吗?我不想在组合框中显示ID,只想显示名称。。如何做到这一点?