[英]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.