Удалить конкретное значение из DropDown

Я новичок в dot.net, может кто-нибудь предложить мне, как удалить конкретное значение в выбранном раскрывающемся списке.

Вот почему я упоминаю "извлеченный" означает, что выпадающий список генерируется из таблицы или извлекается из нее с использованием sql.

sqlquery=SELECT DISTINCT rtrim(ltrim(C.Cust_name)) as Cust_name FROM table1 A inner join table2 B on A.cust_code = B.Cust_Code
SqlCommand cmd = new SqlCommand(sqlquery, conn);
            SqlDataReader sr = cmd.ExecuteReader();

        while (sr.Read())
        {
            {
                cmb_cust.Items.Add(sr["Cust_name"].ToString());
            }
        }

foreach (ListItem li in cmb_cust.Items)
            {
              {
                    if (li.Value == "value1")
                        cmb_cust.Items.Remove(li);
                }
            }

Если я обработаю вышеупомянутое утверждение, перед которым я столкнулся с коллекцией, измененная операция перечисления может не выполняться, могу ли я получить любое другое решение, такое как обмен списком с временным списком и обработка операции. Мне не нужно значение 1 после получения из SQL.

3 ответа

Решение

Даже лучше, чем удалять предмет после этого, не добавляйте его в первую очередь.

while (sr.Read())
{
    var txt = sr["Cust_name"].ToString();
    if (txt != "value1")
       cmb_cust.Items.Add(txt);
}

Или вы можете исключить его уже в запросе SQL.

SELECT tbl1.Cust_name 
FROM
(
  SELECT DISTINCT rtrim(ltrim(C.Cust_name)) as Cust_name 
  FROM table1 A 
  inner join table2 B on A.cust_code = B.Cust_Code
) As tbl1
where 
tbl1.Cust_name != 'value1'

Причина, по которой вы получаете это исключение, заключается в том, что вы не можете удалять элементы из коллекции, пока она перечисляется. Если вы хотите удалить элемент, вы должны написать:

cmb_cust.Items.Remove("value1");

Даже лучше, чем пропускать его в процессе добавления, - это вообще не извлекать его из БД:

sqlquery = @"SELECT DISTINCT rtrim(ltrim(C.Cust_name)) as Cust_name 
 FROM table1 A inner join table2 B on A.cust_code = B.Cust_Code 
 WHERE Cust_name <> 'value1'";

;-)

Вы не можете изменить коллекцию с foreach петля. Измените это на for цикл и это должно работать.

Другие вопросы по тегам