2014-12-08 1 views
0

Я работаю с двумя полями со списком в окнах в C# .net .. если я выберу любую страну из cmb1, отобразятся состояния, принадлежащие этой стране, из таблицы состояний в поле со списком2 ...Как избежать дубликатов значений из списков со списком?

Если я выберу любую название страны из cmb1 с 2 раза ... государства относятся к этой стране добавляют 2 раза в комбо Box2 ... как можно избежать ...

-код здесь

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

Что вы подразумеваете под 'select any country name from cmb1 with 2 times.' 2 раза ? – Vishal

+0

Если вы хотите добавить одновременно только одну страну, вы можете очистить поле со списком при каждом выборе, прежде чем заполнять его состояниями и использовать параметризованные операторы sql. –

ответ

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(); 
    } 
+0

Ваш код не работает - он очищает список каждый раз, когда он добавляет новый элемент - в конце список будет содержать только 1 элемент. – Dai

+0

@ Дай Да, вы правы, изменили ответ – Sajeetharan

2

Просто очистить содержимое коробки, прежде чем заполнить его:

cmdState.Items.Clear() 

Обратите внимание, что SQL уязвим для инъекций SQL (т.е. посмотрите, что произойдет, если имя страны имеет апостроф в нем, например. «Кот д'Ивуар»)

0

Прежде всего, состояния в combobox не добавляются автоматически, вы явно добавляете его в свой код. Фактически, он будет добавлен столько раз, сколько вы выберете страну. Причина в том, что вы не очищаете выпадающие списки состояний, когда вы выбираете страну вторым или последующим временем. Для этого, вы должны очистить государства COMBOBOX как только изменения выбора в странах COMBOBOX:

cmbstate.Items.Clear(); 

Кроме того, как Dai отметил SQL склонен к инъекции SQL. Попробуйте использовать LINQ to SQL или хранимые процедуры для более безопасного выполнения SQL.

Смежные вопросы