ASP.net 删除时 foreach 出现 GridView InvalidOperationException

ASP.net GridView InvalidOperationException on foreach when deleting

我正在使用 ASP.net,我在 gridview 上添加了一个删除按钮,我试图删除所单击按钮的行。问题是,我在我的 foreach 上得到了一个 InvalidOperationException。

我的代码中可能还有其他错误,或者我的逻辑可能有误,所以如果您看到任何错误,请指出。谢谢

网格视图cart.ASPX:

<asp:GridView ID="CartGrid" runat="server" AutoGenerateColumns="false" OnRowDeleting="RemoveSelected">
    <Columns>
        <asp:BoundField DataField="product_name" HeaderText="Name" />
        <asp:BoundField DataField="price_per_unit" HeaderText="Price" />
        <asp:BoundField DataField="unit" HeaderText="Unit" />

        <asp:TemplateField>
        <ItemTemplate>
        <asp:LinkButton ID="delSelected" runat="server" Text="Delete" CommandName="Delete"></asp:LinkButton>

        </ItemTemplate>
        <ItemStyle Width="100px" />

        </asp:TemplateField>
    </Columns>
</asp:GridView>

删除方法cart.ASPX.CS

protected void RemoveBtn(object sender, GridViewDeleteEventArgs e)
    {
        ArrayList cartList = (ArrayList)Session["cartList"];

        GridViewRow row = (GridViewRow)CartGrid.Rows[e.RowIndex];

        String name = row.Cells[0].Text;
        //String name = (string)CartGrid.DataKeys[e.RowIndex].Value;
        //String name = CartGrid.SelectedRow.Cells[1].Text;

        foreach (product p in cartList)
        {
            if (p.product_name.Equals(name))
            {
                cartList.Remove(p);
            }
        }

        CartGrid.DataBind();
    }

您不能修改正在使用 foreach 迭代的集合 - 请参阅 this question 了解更多信息。

您好,我认为问题是您正在使用 cartlist for 循环,同时您想从中删除值,这是不可能的。

只是你需要改变你的方法,比如创建空列表并将所有索引添加到其中,从你必须删除值的地方从下到上凝视,就像从列表末尾一样,这样它就不会影响索引通过删除值和循环后的列表,您可以使用新的空列表删除它,该列表包含应删除的所有值的列表。