Странное поведение при копировании списка строковых массивов в файл Excel - PullRequest
0 голосов
/ 10 января 2020

У меня есть приложение, которое создает строковый массив из некоторых значений, собранных по сети CAN. Я добавляю массив строк в просмотр списка, а затем добавляю его в свойство списка, которое отправляется методу для копирования списка в файл Excel.

Я добавляю массив в просмотр списка, используя это:

ListViewItem item = new ListViewItem(UnitsCheckedArray);
DCSDlv.Items.Add(item);

Сразу после этого я добавляю тот же массив в список строк [], используя это:

UnitsChecked.Add(UnitsCheckedArray);

Это результат добавления строкового массива в представление списка enter image description here

Я записываю данные в список UnitsChecked, вызывая метод write to excel:

public void WriteToExcel(List<String[]> list)
    {

        int Row = GetFirstEmptyRow();
        int Column = 1;
        foreach(var item in list)
        {
            Column = 1;

            foreach(var subItem in item)
            {
                excelWS.Cells[Row, Column] = subItem;
                Column++;
            }

            Row++;
        }

Ниже приведено то, что распечатывается в файле Excel. Как видно, данные не совпадают с тем, что есть в списке. enter image description here

Я в недоумении, почему данные меняются в списке. Единственное время, когда данные записываются в список UnitsChecked, - это код, указанный выше. Нет другого кода, который касается этого списка. Кроме того, данные записываются в просмотр списка и в список одновременно, поэтому одни и те же данные должны быть в обоих.

Это то место, где список затрагивается в моем коде: enter image description here

ДОБАВЛЕННЫЕ ДАННЫЕ Код запущен на BGWorker завершен. Именно здесь данные отправляются в просмотр списка и список, используемый для создания данных Excel.

 private void bg1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        ListViewItem item = new ListViewItem(UnitsCheckedArray);
        DCSDlv.Items.Add(item);
        DCSDlv.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);

        UnitsChecked.Add(UnitsCheckedArray);
        UpdateStatusMessage("Record Added Successfully");
        btStartTest.Enabled = true;
        GenReportButton.Enabled = true;
    }
...