在循环中使用.removeat删除DataTable行错误

本文关键字:删除 DataTable 错误 removeat 循环 | 更新日期: 2023-09-27 18:08:25

我正在做一个程序,不知道如何解决我现在遇到的这个问题。

当我运行这段代码:

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中间的一行。

如果我运行表的最后一行的代码,我没有任何问题。

在循环中使用.removeat删除DataTable行错误

问题是,当您在循环中删除一行时,它会对该点之后的所有行重新编号,从而导致中断。

将代码改为从末尾到开始循环:

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);
   }
}