Ошибка при удалении столбца в строго типизированном наборе данных?

Когда я извлекаю данные в свой DataSet, столбец year является третьим столбцом в моем DataSet. Мне не нужен этот столбец после его использования, поэтому я делаю некоторые вычисления, поэтому я удаляю его, используя метод Remove, передавая имя столбца методу Remove. Проблема в том, что я извлекаю данные в цикле foreach, поэтому, когда я снова извлекаю данные, столбец year теперь является последним столбцом в DataSet, и когда я пытаюсь получить к нему доступ, выдается ошибка, говорящая, что столбец year не найден. . Мой способ обойти это состоял в том, чтобы клонировать DataSet в DataTable, а затем импортировать каждую строку из набора данных в мой DataTable, но есть ли более эффективный способ или способ сохранить столбец year в исходном положении.

private int GetData()
{
    dataSet.GetExportData();

    DataTable dt = dataSet.ExportData;

    for(int i = 0; i <dataSet.ExportData; i++)
    {
        //Do Stuff
    }

    dataSet.Columns.Remove(dataSet.ExportData.YearColumn.ColumnName);   
}

В приведенном выше коде, когда я открываю диалоговое окно и выбираю данные для экспорта, он работает в первый раз, но если я оставляю диалог открытым и снова нажимаю кнопку для экспорта, возникает ошибка. Если закрыть диалоговое окно и снова открыть, все работает нормально. Как я уже говорил, я заметил, что когда он снова извлекает данные при нажатии кнопки с помощью dataSet.GetExportData(), он помещает столбец Year в качестве последнего столбца вместо определенной позиции в строго типизированном DataSet, что, как я предполагаю, является проблемой, но не может выяснить, как это исправить, помимо клонирования и импорта.


person Xaisoft    schedule 20.09.2012    source источник
comment
Вы пытаетесь удалить столбец в цикле foreach и снова получить значение столбца? не могли бы вы опубликовать код?   -  person Amir Rezvani    schedule 20.09.2012
comment
@CjCoax - Да, у меня сейчас нет кода, но я опубликую его позже, но то, что вы сказали, это именно то, что я делаю.   -  person Xaisoft    schedule 20.09.2012


Ответы (1)


Лучше бы в комментарии, но я хочу воспользоваться стилем кода, также сложно сказать, чего именно вы хотите добиться, не видя кода,

    foreach (DataRow row in myTable.Rows)
    {
        //do something with year column 
        myTable.Columns.Remove("year");
    }

вышеприведенный код отлично работает в первой итерации, но затем произойдет сбой, так как myTable.Columns.Remove("year") удаляет весь столбец из таблицы, а не только из текущей строки, и дает вам: You'll get Column 'year' does not belong to table Table.exception.

Почему бы вместо этого не убрать myTable.Columns.Remove("year"); из foreach?

    foreach (DataRow row in myTable.Rows)
    {
        //do something with year column 
    }

    myTable.Columns.Remove("year");
person Amir Rezvani    schedule 20.09.2012
comment
Извините, я скоро говорил. Данные не извлекаются в цикле foreach, я опубликую код. - person Xaisoft; 20.09.2012