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