簡體   English   中英

將數據從數據表填充到組合框

[英]Fill data into combobox from datatable

我已經搜索並嘗試過,但我無法找到滿足我需要的正確答案。

在我的應用程序中,我有組合框,我想從數據庫表列 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

我希望它在每次點擊時加載一次,或者是否有其他更好的方法來整理它。

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

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

希望這可以幫助!

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM