2011-02-11 10 views
0

데이터 소스가 List<T> 인 gridview가 있습니다. 내 buttonRemove_Click() 함수에서 Gridview에서 항목을 제거하려고하면 RowDeleting 이벤트를 처리하는 또 다른 함수가 호출되어 List<T>에서 항목을 제거하는 곳이 호출됩니다. 문제는 여러 항목을 gridview에서 제거하려는 경우 gridview의 색인과 내 List<T>의 색인이 동기화되지 않습니다. 예를 들어, 내 gridview 및 내 목록에 10 항목이 있고 마지막 두 항목을 제거하려고합니다. 여기에 내가 RowDeleting 기능에 다음 나의 buttonRemove_Click 기능Gridview 항목 제거

foreach (GridViewRow row in gridViewItems.Rows) 
{ 
    CheckBox cb = (CheckBox)row.FindControl("checkBox"); 

    if (cb != null && cb.Checked) 
    { 
     gridViewItems.DeleteRow(row.DataItemIndex); 
    } 
} 

에서 그것을 어떻게, 내가 먼저 인덱스 (8)에 대한 이벤트를받을 수 있습니다, 나는 그것을 제거. 이제 마지막 항목 (인덱스 9)을 삭제할 때 인덱스가 범위를 벗어나므로 예외가 발생합니다. 이 문제를 어떻게 해결합니까?

역순으로 행을 제거하려고하면 문제가 해결 될 것이라고 생각합니다. 즉 가장 높은 색인부터 시작합니다. 아무도 이것이 어떻게 할 수 있는지 말할 수 있습니까?

답변

1
GVGLCode1.DataSource = dt; 
GVGLCode1.DataBind(); 

int iCount = GVGLCode1.Rows.Count; 
for (int i = 0; i <= iCount; i++) 
{ 
    CheckBox cb = (CheckBox)GVGLCode1.rows[i].FindControl("checkBox"); 
    if (cb != null && cb.Checked) 
    { 
     GVGLCode1.DeleteRow(i); 
    } 
} 

시도해보십시오. 도움이 될 수 있습니다.

+0

각 행의 체크 박스를 찾으십시오. – harshagile

+0

CheckBox를 추가하십시오. cb = (CheckBox) GVGLCode1 [i] .rows.FindControl ("checkBox"); – harshagile

+0

이것은 작동하지 않습니다 – Tux