2017-02-09 75 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); 
    } 
}