Ошибка при попытке дублировать строки в DataTable в c # - PullRequest
0 голосов
/ 28 августа 2018

У меня есть существующая таблица данных с именем _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 голосов
/ 28 августа 2018

вы получаете ошибку перечисления, потому что вы перебираете коллекцию, которая изменяется в цикле (новые строки добавляются к ней),

Как вы сказали в комментарии, вы получаете исключение из памяти, потому что вы итерируете таблицу _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, добавляйте строки во временную таблицу (с той же схемой) и после итерации объединяйте две таблицы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...