我已经搜索过并尝试过但我无法找到合适的答案。
在我的应用程序中我有组合框我想从数据库表列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 :(得分: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);
}
}