2013-04-10 4 views
1

프로그램에서 작업 중이며 지금이 문제를 해결하는 방법을 모르겠습니다..RemoveAt를 사용하여 루프에서 DataTable 행을 삭제하는 중 오류가 발생했습니다.

내가이 코드를 실행하면 :

int maxRows = AfdelingDT.Rows.Count; 
maxRows -= 1; 
for(int i = 0;i <= maxRows; i++) 
{ 
    if (Convert.ToInt16(AfdelingDT.Rows[i][0]) == Convert.ToInt16(removeRowTB.Text)) 
    { 
     AfdelingDT.Rows.RemoveAt(i); 
    } 
} 

나는 내가 DataTable의 중간에 행을 삭제하려고하면 행이 존재하지 않는 오류에 봉착합니다.

테이블의 마지막 행에 대한 코드를 실행해도 전혀 문제가 없습니다.

+0

난 당신이'RemoveAt을 (Ⅰ -)해야 할 수 있습니다 생각'(아마도 캔트하지 비주얼 스튜디오와 컴퓨터에 기억 ++한다 나는 대답으로 쓴 적이없는 이유입니다) – Sayse

답변

1

문제는 루프 내부의 행을 제거 할 때 그 지점 이후의 모든 행의 번호가 다시 매겨 지므로 문제가 발생한다는 것입니다.

는 처음으로 끝에서 루프 코드를 변경

:

int maxRows = AfdelingDT.Rows.Count; 
maxRows -= 1; 
for(int i = maxRows;i >= 0; i--) 
{ 
    if (Convert.ToInt16(AfdelingDT.Rows[i][0]) == Convert.ToInt16(removeRowTB.Text)) 
    { 
     AfdelingDT.Rows.RemoveAt(i); 
    } 
} 
+0

정말 고마워요,하지만 난 일을하지 않았다는 말을해야합니다. 당신은 여전히 ​​내 문제가 무엇인지 명확히했으며, 아무도 다른 사람이 먼저 게시하지 않으면 답변을 찾으면 게시 할 것입니다. thx –

+0

나는 내 자아를 꿰매 야한다. 나는 당신이 슬픈 (위의 코드)을하고 maxRows에서 시작했다는 것을 보거나 기억하지 못했다고 생각한 것은 i ++를 i-로 바꾸는 것이 었습니다. for 루프가 1 라운드 만 실행되지만 어떻게 필요하지는 않았을까요? . 정말로 당신의 대답은 나를 도왔습니다. –

관련 문제