1

I faced a problem with a DataTable. When I run to client it throws an Exception and mentions the "in" in foreach.

Collection was modified; enumeration operation might not execute.

This is the code:

foreach (DataRow dr in stStatusTable.Rows)
{
    if (Convert.ToInt32(dr["st_id"]) == stStatus.st_id)
    {
        dr["st_id"] = Convert.ToInt32(dr["st_id"]) + 1;
        dr.AcceptChanges();

    }
    else
    {

        stStatusTable.Rows.Add(stStatus.st_id, stStatus.st_name, stStatus.RTime, stStatus.Total_Mark, stStatus.Completed);
    }
}

How can I solve this?

ericx
  • 125
  • 1
  • 2
  • 7

2 Answers2

2

Becouse you are adding rows at the same time you are enumerating them..

You should add the rows to a second clean datatable, and after the loop, copy the rows from the new datatable to the original one.

Burnsys
  • 854
  • 1
  • 8
  • 11
2

Use a for-loop instead of an foreach loop.

However, be careful with the index when adding / removing items.

Matthias
  • 12,053
  • 4
  • 49
  • 91