从DropDown中删除特定值

时间:2015-05-15 12:58:05

标签: c# list drop-down-menu remove-if

我是dot.net的初学者,任何人都可以建议我如何删除获取的下拉列表中的特定值。

这里为什么我提到fetched意味着dropdownlist是使用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);
                }
            }

如果我处理上面的语句我面对集合被修改枚举操作可能无法执行,我可以得到任何其他解决方案,例如将列表交换到临时列表并处理操作。从sql中获取后,我不需要 value1

3 个答案:

答案 0 :(得分:2)

甚至比之后删除项目更好,不要在第一时间添加它。

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");

答案 1 :(得分:1)

甚至比在添加过程中跳过它更好的是根本不从DB中获取它:

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'";

- )

答案 2 :(得分:0)

您无法使用foreach循环修改集合。将其更改为for循环,这应该有效。