如何避免组合框中的重复值

本文关键字:何避免 组合 | 更新日期: 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。