【问题标题】:In Combo Box c# how can i select another value per item在 Combo Box c# 中,我如何为每个项目选择另一个值
【发布时间】:2016-04-29 09:23:12
【问题描述】:

每次我点击组合框时,它都会显示 EmpID 列表

我想在组合框中显示 EmployeeName,但它会得到 EmpID

这是我的代码

private void EmployeeTimecard_Load(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CSPOSWare.Reports.Properties.Settings.chaplinConnectionString"].ConnectionString))
    {
        try
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("Select (LastName + ', ' + FirstName) AS Employee, EmpID from Employee ", conn))
            using (SqlDataReader rdr = cmd.ExecuteReader())
            {
                while (rdr.Read())
                {
                    GrpEmpCBox.Items.Add(rdr["EmpID"].ToString());
                }
            }
        }
        catch { }
    }
    this.FormBorderStyle = FormBorderStyle.FixedSingle;
    this.GrpEmpCBox.DropDownStyle = ComboBoxStyle.DropDownList;
    chkAll.Checked = true;
}

This is where i get the employee name

This is where i want to get the empID from the Employee table

【问题讨论】:

    标签: c# sql sql-server stored-procedures


    【解决方案1】:

    像下面这样使用:

    while (rdr.Read())
    {
        ListItem comboItem = new ListItem();
        comboItem.Text = rdr["Employee"].ToString();
        comboItem.Value = rdr["EmpID"].ToString();
        GrpEmpCBox.Items.Add(comboItem);
    }
    

    这样您就可以使用以下代码从下拉列表中选择值:

    string selectedText = GrpEmpCBox.SelectedItem.ToString(); // which gives you the Employee
    string selectedValue = GrpEmpCBox.SelectedValue;// gives you EmpID
    

    一个聪明的选择是使用这样的数据表绑定组合框:

    string query = "Select (LastName + ', ' + FirstName) AS Employee, EmpID from Employee ";
    SqlDataAdapter da = new SqlDataAdapter(query, conn);
    conn.Open();
    DataTable dt = new DataTable();
    da.Fill(dt);
    GrpEmpCBox.DisplayMember =  "Employee";
    GrpEmpCBox.ValueMember = "EmpID ";
    GrpEmpCBox.DataSource = dt;
    GrpEmpCBox.DataBind();
    

    【讨论】:

    • 私有字符串 GetEmp() { return GrpEmpCBox.SelectedValue.ToString();如果我使用 SelectedValue,它会显示“'System.NullReferenceException' 类型的未处理异常”
    【解决方案2】:

    您正在将值读取到组合框中,例如;

    GrpEmpCBox.Items.Add(rdr["EmpID"].ToString());
    

    EmpID 应更改为您创建的Employee 字符串。

    但是,您可能希望同时读取两者,将名称作为显示,将 ID 作为值。

    【讨论】:

    • 是的,我可以这样做,但我想获取数据的表中的记录只有 EmpID 列,这是我的问题..
    • 好的,那么您需要向我们展示一些表架构和示例数据,以便我们了解如何返回员工姓名。
    【解决方案3】:

    假设 empname 是必需的员工姓名

        using (SqlDataReader rdr = cmd.ExecuteReader())
            {
                while (rdr.Read())
                {
                    GrpEmpCBox.Items.Add(rdr["EmpName"].ToString());
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 2020-10-19
      相关资源
      最近更新 更多