Ich benutze ASP.net und ich habe eine Schaltfläche zum Löschen in einer Gridview hinzugefügt und ich versuche, die Zeile der Schaltfläche geklickt entfernen. Die Sache ist, dass ich eine InvalidOperationException auf meinem Foreach bekomme.ASP.net GridView InvalidOperationException auf foreach beim Löschen
Ich habe möglicherweise andere Fehler im Code oder meine Logik kann falsch sein, also, wenn Sie etwas davon sehen, weisen Sie sie bitte darauf hin. Vielen Dank.
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>
Löschmethode 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();
}
Sie können keine Iterationsvariable oder vielmehr die Sammlung ändern, auf der Sie iterieren. – C4u
Mögliches Duplikat von [Element in 'foreach' effizient löschen] (http://stackoverflow.com/questions/8791557/efficiently-deleting-item-from-within-foreach) – klashar
Mögliche Duplikate von [Warum kann ich nicht ändern? die Variable der Schleife in einer foreach?] (http://stackoverflow.com/questions/3551696/why-cant-i-modify-the-loop-variable-in-a-foreach) – C4u