2013-01-10 52 views
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,messssage框只顯示我的名字......有人能告訴我我的錯在哪裏?非常感謝你從組合框中獲取選定值的ID

+0

什麼是「ID」.ToString()'??? :D – yogi

+2

您正在選擇ID和名稱,但您只是在'while'中添加名稱。你的'DataSet'和'DataTable'也是未使用的,''ID「.ToString()'很有趣。您還應該使用'using'語句來進行連接和數據讀取器,以確保它們在異常情況下也能被處置(關閉)。 –

+0

對不起,Tostring的東西已經被添加了錯誤.. – Nejthe

回答

1

數據綁定組合框後,通過使用datareader插入值來刪除綁定。只是刪除這一部分:

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()}); 
+0

我要保留它,因爲當我刪除它,我得到一個空的組合框..謝謝你很多 – Nejthe

+0

如果你堅持DataReader就是這樣。如果你選擇一個數據適配器,你可以使用數據綁定。 –

+0

你認爲哪個更好? – Nejthe

0

試試這個

this.cbEmpName.Items.Add(new ListItem(dr[0].ToString(),dr[4].ToString())); 
+0

對不起我的問題..但是,你是什麼意思的數字4? – Nejthe

+0

我認爲它必須是1 ..我不確定 – Nejthe

+0

它實際上應該是3,因爲ID是您的查詢中的第4列,並且dr從0開始索引 – stanke