删除强类型数据集中的列时出错?
Posted
技术标签:
【中文标题】删除强类型数据集中的列时出错?【英文标题】:Error when removing column in strongly-typed dataset? 【发布时间】:2012-09-20 03:20:44 【问题描述】:当我将数据检索到我的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
中的定义位置,我认为这是问题,但除了克隆和导入之外,不知道如何解决它。
【问题讨论】:
您是否尝试在 foreach 循环中删除该列,并再次检索该列的值?你能发布一些代码吗? @CjCoax - 是的,我现在没有代码,但稍后会发布,但你说的正是我正在做的。 【参考方案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");
【讨论】:
抱歉,我很快就联系上了。在foreach循环中没有检索到数据,我将发布一些代码。以上是关于删除强类型数据集中的列时出错?的主要内容,如果未能解决你的问题,请参考以下文章