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

従業員を選択するときに ID を取得できません。メッセージ ボックスに名前が表示されるだけです。どうもありがとう

4

2 に答える 2

1

コンボボックスをデータバインディングした後、データリーダーを使用して値を挿入してバインディングを削除します。この部分を削除するだけです:

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()});
于 2013-01-10T10:16:08.837 に答える
0

これを試して

this.cbEmpName.Items.Add(new ListItem(dr[0].ToString(),dr[4].ToString()));
于 2013-01-10T10:20:20.530 に答える