在强类型数据集中删除列时出错?

时间:2012-09-20 03:20:45

标签: c# .net-2.0 strongly-typed-dataset

当我将数据检索到DataSet时,year列是我DataSet中的第3列。在使用它之后我不需要这个列进行一些计算,因此我使用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列作为最后一列而不是强类型{{1}中的已定义位置我假设是问题,但除了做克隆和导入之外,无法弄清楚如何修复它。

1 个答案:

答案 0 :(得分:0)

最好是发表评论,但我想利用代码样式,而且很难说没有看到代码就想要实现什么,

    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.异常。

为什么不将myTable.Columns.Remove("year");取出foreach呢?

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

    myTable.Columns.Remove("year");