【问题标题】:Fill data into combobox from datatable将数据从数据表填充到组合框中
【发布时间】:2017-02-09 05:07:02
【问题描述】:

我已经搜索并尝试过,但我无法找到满足我需求的正确答案。

在我的应用程序中,我有组合框,我想从数据库表列 leavetype 向其中添加数据。

 table hsettings
 hsysid
 leavetype
 martialstatus

现在我正在使用 mouseclick 事件,

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

我希望它在每次点击时加载一次,或者如果有任何其他更好的方式来解决它。

【问题讨论】:

  • 如何在页面加载时加载组合框?
  • @un-lucky 感谢您的回复。

标签: c# combobox datatable


【解决方案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);
        }
    }

希望这会有所帮助!

【讨论】:

  • @un-lucky 根据您的评论更新。
  • 感谢 anoop 成功了,您的两个建议都很有帮助。
【解决方案2】:

在重新填充之前,您需要从组合框中删除所有项目。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多