2017-02-27 8 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> 

삭제 방법 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

안녕하세요 저는 문제가 당신이 루프에 대한 cartlist를 사용하고 같은 시간에 불가능한 값을 삭제하고 싶다고 생각합니다.

빈 목록을 만든 다음 값을 삭제해야하는 곳에서 모든 색인을 추가해야하는 등의 방식을 변경해야합니다. 목록의 맨 아래에서 위에서 아래로 위로 쳐다 보면서 색인에 영향을 미치지 않도록합니다. 삭제 된 값 및 후 루프로 목록을 삭제할 모든 값의 목록을 포함하는 새로운 빈 목록을 사용하여 삭제할 수 있습니다.

+0

감사! 그게 내 문제를 해결 했어, 내 영웅은 망토가 없었어! 1 분 안에 악이 대답을 수락합니다. 귀하의 의견은 상황을 더 잘 이해할 수있게 해주었습니다. foreach의 if 문이 대신 수행 될 때 p 제품의 가치를 얻는 임시 제품을 만들었습니다. –

+0

감사합니다. @albinaberg –