我正在使用C#.net中的Windows窗体中的2个组合框...如果我从cmb1中选择任何国家/地区显示状态属于该国家/地区从状态表到组合框2 ...
如果我从cmb1中选择任意国家名称2次......属于该国家/地区的状态在组合框2中添加2次...如何避免...
代码在这里
private void Form12_Load(object sender, EventArgs e)
{
con.Open();
cmd = new SqlCommand("select cname from country", con);
cmd.CommandType = CommandType.Text;
dr = cmd.ExecuteReader();
while (dr.Read())
{
cmbcountry.Items.Add(dr["cname"]);
}
con.Close();
}
private void cmbcountry_SelectedIndexChanged(object sender, EventArgs e)
{
con.Open();
cmd = new SqlCommand("select sname from state where cname='"+cmbcountry.SelectedItem.ToString()+"'", con);
cmd.CommandType = CommandType.Text;
dr = cmd.ExecuteReader();
while (dr.Read())
{
cmbstate.Items.Add(dr[0]);
}
con.Close();
}
答案 0 :(得分:2)
在填充之前,请清除该框的内容:
cmdState.Items.Clear()
请注意,您的SQL容易受到SQL注入攻击(即,如果国家/地区名称中包含撇号,请注意会发生什么情况,例如“Côted'Ivoire”)
答案 1 :(得分:1)
只需清除现有的cmbstate.Items并重新添加,
private void cmbcountry_SelectedIndexChanged(object sender, EventArgs e)
{
cmbcmbstate.Items.Clear();
con.Open();
cmd = new SqlCommand("select sname from state where cname='"+cmbcountry.SelectedItem.ToString()+"'", con);
cmd.CommandType = CommandType.Text;
dr = cmd.ExecuteReader();
while (dr.Read())
{
cmbstate.Items.Add(dr[0]);
}
con.Close();
}
答案 2 :(得分:0)
首先,组合框中的状态不会自动添加,您在代码中明确添加它。实际上,只要您选择国家/地区,就会添加它。原因是当您在第二次或以后选择一个国家时,您没有清除状态组合框。为此,一旦国家组合框中的选择发生变化,您应该立即清除状态组合框:
cmbstate.Items.Clear();
另外,正如戴指出SQL易于注入SQL。尝试使用LINQ to SQL或存储过程来执行更安全的SQL。