我正在使用ASP.net,我在gridview上添加了一个删除按钮,我试图删除单击按钮的行。但事实是,我的foreach上有一个InvalidOperationException。
我可能在代码中有其他错误,或者我的逻辑可能有误,所以如果您看到任何错误,请指出它们。感谢。
gridView 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();
}
答案 0 :(得分:2)
您好我认为问题在于您正在使用cartlist for循环,同时您想要删除不可能的值。
只需要改变你的方法,比如创建空列表并将所有索引添加到其中,你必须从中删除值从底部到顶部,从列表末尾开始,这样它就不会影响索引按删除的值列出,循环后你可以使用新的空列表删除它,其中包含应该删除的所有值的列表。
答案 1 :(得分:1)
您无法使用foreach修改正在迭代的集合 - 有关详细信息,请参阅this question。