2017-02-09 41 views
1

我已經搜索並嘗試過,但無法找到正確的答案來滿足我的需要。從數據表填充數據到組合框

在我的應用程序我有組合框我想從數據庫表列leavetype添加數據到它。

table hsettings 
hsysid 
leavetype 
martialstatus 

現在我用鼠標點擊事件,

private void txtleavetype_MouseClick(object sender, MouseEventArgs e) 
{ 
    try 
    { 
     con = new SqlConnection(cs.DBConn); 
     con.Open(); 
     cmd = new SqlCommand(" select leavestype from hrsettings", con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      txtleavetype.Items.Add(dr["leavestype"]); 
     } 
     dr.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

每當我點擊下拉框它表明從表列,但對數據的每一次點擊加載多次同列數據。

1 
2 
3 
4 
1 
2 
3 
4 

我希望它每次點擊加載一次,或者如果有任何其他更好的方法來整理它。

+0

如何在加載頁面時加載comboBox? –

+0

@非幸運感謝您的回覆。 – Bukhalifa

回答

1

您可以檢查組合框是否已經加載。

private void txtleavetype_MouseClick(object sender, MouseEventArgs e) 
{ 
    try 
    { 
     if(txtleavetype.Items.Count==0){ 
     con = new SqlConnection(cs.DBConn); 
     con.Open(); 
     cmd = new SqlCommand(" select leavestype from hrsettings", con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      txtleavetype.Items.Add(dr["leavestype"]); 
     } 
     dr.Close(); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

否則,您可以在添加之前清除列表項。

private void txtleavetype_MouseClick(object sender, MouseEventArgs e) 
    { 
     try 
     { 
      txtleavetype.Items.Clear(); 
      con = new SqlConnection(cs.DBConn); 
      con.Open(); 
      cmd = new SqlCommand(" select leavestype from hrsettings", con); 
      SqlDataReader dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       txtleavetype.Items.Add(dr["leavestype"]); 
      } 
      dr.Close(); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

根據評論,您還可以將下面的代碼移動到Page_Load事件中,並在不是回發的時候使用。

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      if (!IsPostBack) 
      { 
      txtleavetype.Items.Clear(); 
      con = new SqlConnection(cs.DBConn); 
      con.Open(); 
      cmd = new SqlCommand(" select leavestype from hrsettings", con); 
      SqlDataReader dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       txtleavetype.Items.Add(dr["leavestype"]); 
      } 
      dr.Close(); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

希望這會有所幫助!

+0

這將是一種解決方法,而不是解決方案。 –

+0

是的,這是一種解決方法。 –

+0

@ un-lucky根據您的評論更新。 –

0

在重新填充之前,您需要從組合框中刪除所有項目。

private void txtleavetype_MouseClick(object sender, MouseEventArgs e) 
{ 
    try 
    { 
     con = new SqlConnection(cs.DBConn); 
     con.Open(); 
     cmd = new SqlCommand(" select leavestype from hrsettings", con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     txtleavetype.Items.Clear(); 
     while (dr.Read()) 
     { 
      txtleavetype.Items.Add(dr["leavestype"]); 
     } 
     dr.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

最好的辦法是在form_load時將項目添加到組合框中。

private void Form1_Load(object sender, EventArgs e) 
{ 
    try 
    { 
     con = new SqlConnection(cs.DBConn); 
     con.Open(); 
     cmd = new SqlCommand(" select leavestype from hrsettings", con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      txtleavetype.Items.Add(dr["leavestype"]); 
     } 
     dr.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
}