Сброс данных во время цикла foreach - PullRequest
0 голосов
/ 22 августа 2011

В данный момент я застрял в проблеме, которую не могу понять:

Следующий код создает Datatable ("outDT") для последующего заполнения сетки. Datatable создается с использованием строк других таблиц данных, выпущенных из различных SQL-запросов (те функции «get», которые возвращают также Datatable).

Проблема возникает, когда я вызываю метод "getAverage". Сразу после вызова Datatable «pcDT» обнуляется и вызывает дальнейшее «Изменение коллекции; операция перечисления может не выполняться». ошибка в следующем цикле.

Я никогда не изменял ни одну строку «pcDT» Datatable в цикле foreach, ни в проблемном методе «getAverage».

    public DataTable getReportTable(int idClient)
    {
        Object thisLock = new Object();

        DataTable outDT = new DataTable();
        outDT.Columns.Add("PC Name");

        DataTable pcDT = getPCNames(idClient);
        *foreach (DataRow pcRow in pcDT.Rows)*
        {
            DataRow outRow = outDT.NewRow();
            outRow["PC Name"] = pcRow["Name"];

            **DataTable collectedDT = getAverage((int)pcRow["idPC"]);**
            foreach (DataRow dataRow in collectedDT.Rows)
            {
                outDT.Columns.Add(dataRow["name"].ToString());
                outRow[dataRow["name"].ToString()] = dataRow["AVG(MeasurePoint.dataValue)"];
            }

            outDT.Rows.Add(outRow);
        }

        return outDT;
    }

(*) Это foreach вызывает известную «коллекцию, операция перечисления может не выполняться». ошибка

(**) И вот его вызов метода, который сбрасывает Datatable «pcDT». Эта функция просто вызывает запросы MySQL и получает Datatable.

1 Ответ

0 голосов
/ 22 августа 2011

Все в порядке, я нашел свою ошибку. Это было в классе, который управляет основными SQLQueries; Я использовал экземпляр Datatable, который связан с классом, а не с методом, поэтому, когда я вспоминаю метод, который использовал этот экземпляр, я потерял предыдущий заполненный Datatable ...

Мой плохой: /

...