如何避免组合框中的重复值
本文关键字:何避免 组合 | 更新日期: 2023-09-27 18:33:27
我正在 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();
}
只需在填充框之前清除框中的内容:
cmdState.Items.Clear()
请注意,您的SQL容易受到SQL注入的影响(即,观察如果国家/地区名称中有撇号会发生什么,例如"科特迪瓦")
只需清除现有的 cmbstate。项目并再次添加,
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();
}
首先,组合框中的状态不会自动添加,而是显式添加到代码中。实际上,它将在您选择国家/地区时多次添加。原因是当您第二次或以后选择国家/地区时,您没有清除州组合框。为此,您应该在国家/地区组合框中的选择发生更改后立即清除状态组合框:
cmbstate.Items.Clear();
此外,正如 Dai 指出的那样,SQL 容易出现 SQL 注入。尝试使用 LINQ to SQL 或存储过程来更安全地执行 SQL。