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

时间:2014-12-08 12:18:13

标签: c#

我正在使用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();
}

3 个答案:

答案 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。