按下拉列表C#中的值删除多个项目

时间:2015-01-09 13:45:20

标签: c# asp.net .net drop-down-menu

我有一个名为drpdemo的下拉列表,并包含一些列表项,如下所示

设计代码:

<asp:DropDownList ID="drpdemo" runat="server">
    <asp:ListItem Value="213">Select</asp:ListItem>
    <asp:ListItem Value="0">0</asp:ListItem>
    <asp:ListItem Value="2">2</asp:ListItem>
    <asp:ListItem Value="3">3</asp:ListItem>
    <asp:ListItem Value="4">4</asp:ListItem>
    <asp:ListItem Value="5">5</asp:ListItem>
    <asp:ListItem Value="0">0</asp:ListItem>
</asp:DropDownList>

内联代码:

protected void Page_Load(object sender, EventArgs e)
{
    drpdemo.Items.Remove(drpdemo.Items.FindByValue("0"));
}

当前输出:

Select
  2
  3
  4
  5
  0

以上输出带有0,我不希望它在输出中。

预期输出:

Select
   2
   3
   4
   5
  

注意:不要使用任何循环。

3 个答案:

答案 0 :(得分:4)

您必须使用循环,因为Remove需要一个ListItemFindByValue只返回一个ListItem

要获取要删除的项目,我们可以:

var toDelete = drpDemo.Items
               .Cast<ListItem>()
               .Where(i => i.Value == "0");

然后你可以这样做:

foreach (var item in toDelete)
{
    drpDemo.Items.Remove(item);
}

或者,如果你有功能倾向,请执行:

toDelete.ForEach(i => drpDemo.Items.Remove(i));

一体化:

drpDemo.Items
    .Cast<ListItem>()
    .Where(i => i.Value == "0")
    .ToList()
    .ForEach(i => drpDemo.Items.Remove(i));

答案 1 :(得分:1)

如果仔细查看下拉列表,您会发现两个项目的相同值0。所以方法FindByValue找到第一个,然后你只删除它。如果您只有一个ListItem的值为0,那么您就不会看到它。

答案 2 :(得分:1)

Dropdown列表不支持一次删除多个项目的任何方法,因此您必须使用循环。

如果你可以在内部使用循环,但只是不想写一个循环,你总是可以使用LINQ(虽然我会留下它来判断它是否提高了可读性而不是使用循环)

drpdemo.Items
       .OfType<ListItem>()
       .Where(li => li.Value == "0")
       .ToList()
       .ForEach(li => drpdemo.Items.Remove(li));