当我将数据检索到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}中的已定义位置我假设是问题,但除了做克隆和导入之外,无法弄清楚如何修复它。
答案 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");