从Asp.net ListBox中删除选定的项目

4
我需要从asp.net的ListBox中删除所选项目。我一直在寻找Windows窗体的示例,但没有找到针对asp.net的示例。
我有一个按钮单击事件,可以将一个listbox中的所有项目复制到另一个listbox中。我想能够选择第二个listbox中的单个项目,并单击一个按钮来删除它们。
protected void btnAddAllProjects_Click(object sender, EventArgs e)
{

    foreach (ListItem item in lstbxFromUserProjects.Items)
    {
        lstBoxToUserProjects.Items.Add(item.ToString());
    }


}

    protected void btnRemoveSelected_Click(object sender, EventArgs e)
    {}

你的数据是如何绑定到ListBox上的?你有一个绑定到列表的List吗?请发布一些代码。 - Agustin Meriles
6个回答

17

如果你只想清除所选项目,可以使用以下代码:

        ListBox1.ClearSelection();

        //or

        foreach (ListItem listItem in ListBox1.Items)
        {
            listItem.Selected = false;
        }

如果你想要实际删除项目,那么这是适合你的代码...

        List<ListItem> itemsToRemove = new List<ListItem>();

        foreach (ListItem listItem in ListBox1.Items)
        {
            if (listItem.Selected)
                itemsToRemove.Add(listItem);
        }

        foreach (ListItem listItem in itemsToRemove)
        {
            ListBox1.Items.Remove(listItem);
        }

我认为他是在问如何删除所选项目,而不是如何取消高亮显示。 - Matt T
1
@MattT - 是的,我也是这么想的!我正在更新我的答案 :) 谢谢 - WraithNath
我遇到了错误1:'System.Web.UI.WebControls.ListBox'不包含名为'Selected'的定义,也没有接受类型为'System.Web.UI.WebControls.ListBox'的第一个参数的扩展方法'Selected'(您是否缺少使用指令或程序集引用?) - Ronald McDonald
我们可能可以对代码进行优化,但我手头没有IDE来进行双重检查。foreach(ListItem listItem in ListBox1.SelectedItems) { ListBox1.Items.Remove(listItem); } - Matt T
不行。这对我没用。我的asp:ListBox是一个多选列表,有时(不总是)当我选择要删除的列表中间的项目时,它会删除列表中的第一个项目!为什么?我认为这与列表中项目的顺序有关。 - Fandango68
显示剩余2条评论

1
尝试使用此代码从列表框中删除所选项目。
 protected void Remove_Click(object sender, EventArgs e)
{
    while (ListBox.GetSelectedIndices().Length > 0)
    {
        ListBox.Items.Remove(ListBox.SelectedItem); 
    }
}

0
为什么不直接使用 Items.Remove 并传递选定的项目字符串值。
ListBox1.Items.Remove(ListBox1.SelectedItem.ToString());

可能会有多个选定的项目。 - 182764125216

0

我尝试了一些实验,下面的技术是可行的。它并不是非常高效,因为它在每次迭代时都需要重新查询列表框,但它可以完成工作。

        while (myListBox.SelectedIndex != -1)
        {
            ListItem mySelectedItem = (from ListItem li in myListBox.Items where li.Selected == true select li).First();
            myListBox.Items.Remove(mySelectedItem);
        };

-2
int a = txtbuklist.SelectedIndex;
txtbuklist.Items.RemoveAt(a);

-2
protected void ButtonRemoveSelectedItem_Click(object sender, EventArgs e)
{
    int position = 0;

    for (byte i = 0; i < ListBox2.Items.Count; i++)
    { 
        position = ListBox2.SelectedIndex ;
    }

    ListBox2.Items.RemoveAt(position);
}

2
嗨,欢迎来到Stack Overflow!在社区中,通常不欢迎仅有代码的回答,因为这会让读者自己去弄清楚发生了什么。请提供一些关于你的代码如何运作以及为什么有效的解释。查看如何回答问题获取更多信息。 - Jesse

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