2017-02-27 6 views
0

私はASP.netを使用しています。グリッドビューに削除ボタンを追加し、クリックしたボタンの行を削除しようとしました。私のforeachでInvalidOperationExceptionを取得することです。ASP.net GridView InvalidOperationExceptionは、削除時にforeachにある

コードに他のエラーがある可能性があります。またはロジックが間違っている可能性があります。いずれかが表示された場合は、それらを指摘してください。ありがとう。

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> 

deleteメソッドの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

反復変数または反復処理しているコレクションを変更できません。 – C4u

+0

[foreach '内の項目を効率的に削除する]の複製があります(http://stackoverflow.com/questions/8791557/efficiently-deleting-item-from-within-foreach) – klashar

+0

[なぜ私は変更できませんループ変数foreach?](http://stackoverflow.com/questions/3551696/why-cant-i-modify-the-loop-variable-in-a-foreach) – C4u

答えて

1

あなたはforeachのを反復処理しているコレクションを変更することはできません - のためのthis questionを参照してください。詳しくは。

2

こんにちは私は、あなたがループのためにカートリストを使用していると同時に、同じものから値を削除したいと考えていると思います。

空リストを作成して値を削除する必要がある場所からすべてのインデックスを追加するなどのアプローチを変更するだけでインデックスの効果を発揮できないようにリストの末尾から下に上がるようにする必要があります削除された値によるリストと後のループでは、削除する必要があるすべての値のリストを含む新しい空のリストを使用して削除することができます。

+0

ありがとう!それは私の問題、岬のない主人公を解決しました!病気は1分で答えを受け入れる。 あなたのご意見は、状況がよく分かりました。 foreachのif文が代わりに実行されたときに、pプロダクトの価値を取得するtempプロダクトを作成しました。 –

+0

ありがとう@albinaberg –

関連する問題