1

私はプログラムに取り組んでいますが、現在抱えているこの問題を解決する方法がわかりません。

このコードを実行すると:

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

テーブルの最後の行のコードを実行しても、まったく問題ありません。

4

1 に答える 1

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);
   }
}
于 2013-04-10T17:40:47.993 に答える