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

3

我是一名有帮助的助手,可以为您进行文本翻译。

我有一个下拉列表名为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

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


请解释一下你对循环的厌恶。 - canon
3个回答

5
你必须使用循环,因为Remove需要一个ListItem,而FindByValue只返回一个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));

http://stackoverflow.com/questions/27936466/merge-2-or-more-rows-of-a-column-if-other-column-has-same-values-text-in-sqlserv - user3239820

1

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

如果您可以在内部使用循环,但只是不想编写一个,那么您总是可以使用LINQ(虽然我会让您判断它是否比使用循环更易读)。

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

@canon - 我不认为我写的任何内容都建议这样做。如果我漏掉了什么,请您指出来好吗? - decPL
出现错误-不包含“Remove”的定义,也没有接受类型为“System.Web.UI.WebControls.DropDownList”的第一个参数的扩展方法“Remove”可以找到(您是否缺少使用指令或程序集引用?) - user3239820

1
如果您仔细查看下拉列表,您会注意到有两个值相同的项目,即0。因此,FindByValue方法将找到第一个,然后您只删除该项。如果您只有一个值为0的ListItem,则不会看到它。

@Pranav,你说得对,我测试了我的代码并将其删除了。谢谢:) - Christos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接