尝试在C#中的DataTable中复制行时出错

时间:2018-08-28 09:11:05

标签: c# visual-studio

我有一个名为_longDataTable的现有数据表,其中包含数据。现在,我想复制每一行,并且在该行的每个副本中,我只想根据来自另一数据表SheetCode的值设置values列中的值,请参见下面的代码。例如,values数据表包含1、2和3,然后我希望将_longDataTable的每一行重复三遍,并且在每一行中,我希望Sheet Code列分别具有值1、2和3。我的代码现在如下所示:

foreach (DataRow sheets in _longDataTable.Rows)
{
   for(int k = 0; k < number_of_sheets; k++)
   {
      var newRowSheets = _longDataTable.NewRow();
      newRowSheets.ItemArray = sheets.ItemArray;

      newRowSheets["SheetCode"] = values.Rows[k]["Sheet Code"];

      //add edited row to long datatable
      _longDataTable.Rows.Add(newRowSheets);
   }
} 

但是,出现以下错误:

Collection was modified; enumeration operation might not execute. 

有人知道此错误来自何处以及如何解决我的问题吗?

1 个答案:

答案 0 :(得分:0)

您会得到枚举错误,因为您正在遍历循环中正在更改的集合(已向其中添加新行),

正如您在评论中说的那样,由于要在_longDataTable上进行迭代,因此您将获得内存不足异常,然后向其中添加行,迭代将永远不会结束,并且您将摆脱内存异常。

我认为这可以为您提供帮助:

            //assume _longDataTable has two columns : column1 and SheetCode
        var _longDataTable = new DataTable();
        var duplicatedData = new DataTable();

        duplicatedData.Columns.Add("Column1");
        duplicatedData.Columns.Add("SheetCode");

        foreach (DataRow sheets in _longDataTable.Rows)
        {
            for (int k = 0; k < number_of_sheets; k++)
            {
                var newRowSheets = duplicatedData.NewRow();
                newRowSheets.ItemArray = sheets.ItemArray;

                newRowSheets["SheetCode"] = values.Rows[k]["Sheet Code"];
                newRowSheets["Column1"] = "anything";

                //add edited row to long datatable
                duplicatedData.Rows.Add(newRowSheets);
            }
        }

        _longDataTable.Merge(duplicatedData);

请勿修改_longDataTable,将行添加到临时表(具有相同的架构),并在迭代后合并两个数据表。