Удалить конкретное значение из 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
цикл и это должно работать.