从复选框列表中删除所选

时间:2013-06-14 17:40:11

标签: c# asp.net webforms checkboxlist

我查了很多东西并提出了很多建议,但由于某些原因似乎无法弄清楚为什么这段代码无法从我的复选框列表中删除所选项目:

void btn_remove_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < UPCList.Items.Count; i++)
        {
            if (UPCList.Items[i].Selected == true)
            {
                UPCList.Items.RemoveAt(i);
            }

        }
        Response.Redirect("WebForm2.aspx?account=" + AcctNum.Text);
        Response.End();
    }

5 个答案:

答案 0 :(得分:0)

解决方案:

List<ListItem> toBeRemoved = new List<ListItem>();
for(int i=0; i<UPCList.Items.Count; i++){
    if(UPCList.Items[i].Selected == true)
        toBeRemoved.Add(UPCList.Items[i]);
}

for(int i=0; i<toBeRemoved.Count; i++){
    UPCList.Items.Remove(toBeRemoved[i]);
}

希望有所帮助

答案 1 :(得分:0)

迈克尔:

您无法从正在迭代的列表中删除项目。您将需要创建要删除的索引或项目的数组,然后在完成循环后,您将从阵列中删除项目。

我认为@AnnArbor87为您提供了执行此操作的代码。

HTH。

答案 2 :(得分:0)

它最终成为PICNIC的一个大案例:)这些项目都在数据库中,所以当页面刷新时,它只是检索了我再次“删除”的项目。一旦我从数据库中删除它们,一切都按预期工作。

答案 3 :(得分:-1)

从复选框列表中删除项目然后重定向有什么意义?您没有显示正在进行的更改

Webform2.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

<asp:checkboxlist ID="UPCList" runat="server">
      <asp:ListItem>Item 1</asp:ListItem>
         <asp:ListItem>Item 2</asp:ListItem>
         <asp:ListItem>Item 3</asp:ListItem>
         <asp:ListItem>Item 4</asp:ListItem>
         <asp:ListItem>Item 5</asp:ListItem>
         <asp:ListItem>Item 6</asp:ListItem>
</asp:checkboxlist>
    </div>
        <asp:Button ID="btn_remove" runat="server" Text="Remove" OnClick="btn_remove_Click" />

    </form>
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</body>
</html>

Webform2.aspx.cs:

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "Load";
        }

        public void btn_remove_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < UPCList.Items.Count; i++)
            {
                if (UPCList.Items[i].Selected == true)
                {
                    UPCList.Items.RemoveAt(i);
                }

            }
            Label1.Text = "Done";
        }
    }
}

按预期工作。

如果我加入

Response.Redirect("WebForm2.aspx?account=" + AcctNum.Text);

我得到第1项...... 6删除

和标签1表示“加载”

为了清楚起见我也想做

  foreach (var toRemove in UPCList.Items.OfType<ListItem>().Where(f => f.Selected).ToList())
            {
                UPCList.Items.Remove(toRemove);
            }

但这只是个人意见。

答案 4 :(得分:-1)

for (int i = 0; i < UPCList.Items.Count; i++)
        {
            if (UPCList.SelectedIndex == i)
            {
                UPCList.Items.RemoveAt(i);
            }

        }

使用它。