C# 尝试在c中复制DataTable中的行时出错#
我有一个名为C# 尝试在c中复制DataTable中的行时出错#,c#,visual-studio,C#,Visual Studio,我有一个名为\u longDataTable的现有数据表,其中包含数据。现在,我想复制每一行,在每一行的副本中,我只想根据名为values的不同数据表中的值设置SheetCode列中的值,请参见下面的代码。例如,值数据表包含1、2和3,然后我希望\u longDataTable的每一行被复制三次,并且在每个复制的行中,我希望工作表代码列分别具有值1、2和3。我的代码现在如下所示: foreach (DataRow sheets in _longDataTable.Rows) { for(i
\u longDataTable
的现有数据表,其中包含数据。现在,我想复制每一行,在每一行的副本中,我只想根据名为values
的不同数据表中的值设置SheetCode
列中的值,请参见下面的代码。例如,值
数据表包含1、2和3,然后我希望\u longDataTable
的每一行被复制三次,并且在每个复制的行中,我希望工作表代码
列分别具有值1、2和3。我的代码现在如下所示:
foreach (DataRow sheets in _longDataTable.Rows)
{
for(int k = 0; k < number_of_sheets; k++)
{
var newRowSheets = _longDataTable.NewRow();
newRowSheets.ItemArray = sheets.ItemArray;
newRowSheets["SheetCode"] = values.Rows[k]["Sheet Code"];
//add edited row to long datatable
_longDataTable.Rows.Add(newRowSheets);
}
}
有人知道这个错误是从哪里来的,以及如何解决我的问题吗?您会遇到枚举错误,因为您正在循环中迭代一个正在更改的集合(向其中添加了新行) 正如您在评论中所说的,您得到了内存不足异常,因为您正在对_longDataTable进行迭代,然后向它添加行,迭代永远不会结束,您将得到内存不足异常 我想这可以帮助你:
//assume _longDataTable has two columns : column1 and SheetCode
var _longDataTable = new DataTable();
var duplicatedData = new DataTable();
duplicatedData.Columns.Add("Column1");
duplicatedData.Columns.Add("SheetCode");
foreach (DataRow sheets in _longDataTable.Rows)
{
for (int k = 0; k < number_of_sheets; k++)
{
var newRowSheets = duplicatedData.NewRow();
newRowSheets.ItemArray = sheets.ItemArray;
newRowSheets["SheetCode"] = values.Rows[k]["Sheet Code"];
newRowSheets["Column1"] = "anything";
//add edited row to long datatable
duplicatedData.Rows.Add(newRowSheets);
}
}
_longDataTable.Merge(duplicatedData);
//假设_longDataTable有两列:column1和SheetCode
var_longDataTable=新数据表();
var duplicatedData=新数据表();
重复数据。列。添加(“列1”);
重复数据。列。添加(“SheetCode”);
foreach(longDataTable.Rows中的数据行表)
{
对于(int k=0;k<张数;k++)
{
var newRowSheets=duplicatedData.NewRow();
newRowSheets.ItemArray=sheets.ItemArray;
newRowSheets[“SheetCode”]=值。行[k][“SheetCode”];
newRowSheets[“Column1”]=“任何内容”;
//将编辑的行添加到长数据表
重复数据.Rows.Add(newRowSheets);
}
}
_longDataTable.Merge(duplicatedData);
不要修改_longDataTable,将行添加到临时表(使用相同的架构),并在迭代后合并两个数据表。最简单的方法是
foreach(在_longDataTable.rows.Cast().ToList()中的数据行表)
。使用数据表
枚举器时无法添加新行。出现错误,因为长数据表
在foreach
中是不可变的。有关详细信息,请转到。因此,使用另一种方法,如临时/辅助方法storage@Tetsuya你知道我为什么会得到这样的结果:“抛出了'System.OutOfMemoryException'类型的异常。”使用方法时出错?你还知道如何处理_longDataTable有两列以上的情况吗?你只需要添加尽可能多的duplicatedData.columns.add(“您的列名”);这是您需要的。不幸的是,它给出了以下错误:“输入数组长于此表中的列数。“这是一个伪代码,你应该为它编写自己的自定义代码。你不能只是复制粘贴然后期望它运行。
//assume _longDataTable has two columns : column1 and SheetCode
var _longDataTable = new DataTable();
var duplicatedData = new DataTable();
duplicatedData.Columns.Add("Column1");
duplicatedData.Columns.Add("SheetCode");
foreach (DataRow sheets in _longDataTable.Rows)
{
for (int k = 0; k < number_of_sheets; k++)
{
var newRowSheets = duplicatedData.NewRow();
newRowSheets.ItemArray = sheets.ItemArray;
newRowSheets["SheetCode"] = values.Rows[k]["Sheet Code"];
newRowSheets["Column1"] = "anything";
//add edited row to long datatable
duplicatedData.Rows.Add(newRowSheets);
}
}
_longDataTable.Merge(duplicatedData);