отображать обновленные значения в поле со списком только после выбора другого поля со списком

Когда я выбираю элемент из поля со списком 1, он показывает элементы во втором поле со списком.

И когда я выбираю другой элемент из поля со списком 1, он показывает как элементы предыдущего результата, так и новый результат в поле со списком 2.

Я просто хочу показать только новые элементы в поле со списком 2. Когда я выбираю элементы из поля со списком 1, поле со списком 2 должно обновляться и удалять предыдущие элементы.

private void cb_oname_SelectedIndexChanged(object sender, EventArgs e)
{
    SqlConnection sqlConnection = new SqlConnection(@"Data Source=.;Initial Catalog=Pizza Mania;Integrated Security=True");
    {
        SqlCommand sqlCmd2 = new SqlCommand("SELECT Product_category FROM Product2 where Product_Name='"+cb_oname.SelectedItem+"'", sqlConnection);
        {
            sqlConnection.Open();

            SqlDataReader sqlrdr = sqlCmd2.ExecuteReader();

            while (sqlrdr.Read())
            {
                cb_ocat.Items.add(sqlrdr["Product_category"].ToString());
                cb_ocat.Update();
            }

            sqlConnection.Close();
        }
    }
}

person Aly Goreja    schedule 26.03.2016    source источник
comment
Стив, что мне не хватает?   -  person Aly Goreja    schedule 26.03.2016


Ответы (1)


Вы должны удалить элемент в selectedindex из коллекции Items первой комбинации.

Обратите внимание, что я также изменил ваш код, чтобы использовать правильный оператор using для одноразовых объектов и параметр вместо вашей очень опасной конкатенации строк.

private void cb_oname_SelectedIndexChanged(object sender, EventArgs e)
{
    // Safety check, SelectedIndexChanged is called also when there is
    // no item selected (see later)
    if(cb_oname.SelectedIndex < 0)
        return;

    using(SqlConnection sqlConnection = new SqlConnection(.....))
    using(SqlCommand sqlCmd2 = new SqlCommand(@"SELECT Product_category 
                     FROM Product2 WHERE Product_Name=@name", sqlConnection))
    {
        sqlConnection.Open();
        sqlCmd2.Parameters.Add("@name", SqlDbType.NVarChar).Value = cb_oname.SelectedItem;

        using(SqlDataReader sqlrdr = sqlCmd2.ExecuteReader())
        {
            // Clear the previous items list
            cb_ocat.Items.Clear(); 
            while (sqlrdr.Read())
                cb_ocat.Items.Add(sqlrdr["Product_category"].ToString());
        }
    }
    // Remove from the Items collection, but it is not enough
    cb_oname.Items.RemoveAt(cb_oname.SelectedIndex);
    // Set the selectedindex to -1 so the current text in the combo is reset        
    cb_oname.SelectedIndex = -1;
}
person Steve    schedule 26.03.2016
comment
получая ошибку на sqlconnection.open, что он не существует в текущем контексте!! - person Aly Goreja; 26.03.2016
comment
получение ошибки в sqlcmd2.parameters, что он не существует в текущем контексте - person Aly Goreja; 26.03.2016
comment
Извините за ошибку, убрал точку с запятой в конце использования - person Steve; 26.03.2016
comment
точки с запятой в конце операторов использования следует удалить ?? - person Aly Goreja; 26.03.2016
comment
я удалил их, но все еще получаю ошибку, которая не может инициализировать тип system.data.sqlclient с помощью инициализатора коллекции, потому что он не реализует system.coll.ienumerable - person Aly Goreja; 26.03.2016
comment
Снова исправлено отсутствие второй закрывающей скобки в секунде с использованием - person Steve; 26.03.2016
comment
начальная скобка перед sqlconnection.open() - person Aly Goreja; 26.03.2016
comment
и получаю синтаксическую ошибку в sqlconn.open(); что ', 'ожидается!! - person Aly Goreja; 26.03.2016
comment
по-прежнему возникает ошибка, которая не может инициализировать тип system.data.sqlclient.sqlcommand с помощью инициализатора коллекции, поскольку он не реализует system.coll.IEnumerable - person Aly Goreja; 26.03.2016
comment
Я не вижу никакой ошибки сейчас. Должно быть что-то действительно простое... не могли бы вы отредактировать свой вопрос, добавив (не заменив) текущий код? - person Steve; 26.03.2016
comment
Я удаляю все операторы Using, и теперь мой код работает идеально! - person Aly Goreja; 26.03.2016
comment
Стив, просто скажи мне, как использовать оператор using? - person Aly Goreja; 26.03.2016
comment
Давайте продолжим обсуждение в чате. - person Steve; 26.03.2016