将数据填充到数据表中的组合框中

时间:2017-02-09 05:07:03

标签: c# combobox datatable

我已经搜索过并尝试过但我无法找到合适的答案。

在我的应用程序中我有组合框我想从数据库表列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

我想让它在每次点击时加载一次,或者是否有其他更好的方法来对其进行排序。

2 个答案:

答案 0 :(得分:1)

您可以检查组合框是否已装入。

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

否则您可以在添加之前清除列表项。

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

根据评论,您还可以将以下代码移至Page_Load事件,并在其不是回发时使用。

def myzip(*iterables):
    l = []
    t = tuple()
    x = [iter(a) for a in iterables]
    while True:
        for a in x:
            for i in range(3):
                t = t + tuple(a) 
            l.append(t) 
    for x in l:
        yield x

希望这有帮助!

答案 1 :(得分: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时向combobox添加项目。

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