c# 添加已经属于数据表的行
c# adding row that already belongs to a datatable
我有一个数据表 DTgraph
,该数据表有一个名为 Campaign
的列。该列可以具有三个唯一值之一,即 IVR, City
、City2`。所以行是这样的:
我有一个数据表有这样格式的数据
........ IVR........
.........IVR........
**.........IVR........**
.........City1......
.........City1......
**.........City1......**
.........City2......
.........City2......
**.........City2......**
我想取该列每个唯一值的最后一行,换句话说,我想取粗体行。我几乎做了所有这样的事情:
var cRows = new Dictionary<string, DataRow>(StringComparer.InvariantCultureIgnoreCase);
foreach (DataRow oRow in DTgraph.Rows)
{
var sKey = oRow["Campaign"].ToString();
if (!cRows.ContainsKey(sKey))
{
cRows.Add(sKey, oRow);
}
else
{
cRows[sKey] = oRow;
}
}
var oNewTable = DTgraph.Clone();
foreach (var oRow in cRows.Values)
{
oNewTable.Rows.Add(oRow);
}
如你所见,我把数据放在字典里,最后把字典转成数据表。
我的问题是在这一行:
cRows.Add(sKey, oRow);
我得到一个错误:
The row is already belongs to another datatable
注意:我需要解决那个异常,我不需要新的方法来实现我的目标
注意:我错了,异常在这一行
oNewTable.Rows.Add(oRow);
使用新 table 的 NewRow()
函数,然后使用 oRow.ItemArray
属性 从源行获取值并将它们复制到新创建的行的 ItemArray
.一个例子是:
Array.Copy(oRow.ItemArray, oNewTable.NewRow().ItemArray, oRow.ItemArray.Length)
但是,请记住,这不会保留源行的原始值和当前状态(我认为您无论如何都不会在此处使用)。如果这些事情很重要,请寻求 ImportRow()
解决方案,在复制时保留源行的状态。
老实说,我不是 100% 理解你的问题,但是要修复异常:
The row is already belongs to another datatable.
变化:
oNewTable.Rows.Add(oRow);
收件人:
oNewTable.ImportRow(oRow);
或者创建一个新行并克隆 ItemArray。
foreach (var oRow in cRows.Values)
{
var newRow = oNewTable.NewRow();
newRow.ItemArray = oRow.ItemArray.Clone() as object[];
oNewTable.Rows.Add(newRow);
}
我有一个数据表 DTgraph
,该数据表有一个名为 Campaign
的列。该列可以具有三个唯一值之一,即 IVR, City
、City2`。所以行是这样的:
我有一个数据表有这样格式的数据
........ IVR........
.........IVR........
**.........IVR........**
.........City1......
.........City1......
**.........City1......**
.........City2......
.........City2......
**.........City2......**
我想取该列每个唯一值的最后一行,换句话说,我想取粗体行。我几乎做了所有这样的事情:
var cRows = new Dictionary<string, DataRow>(StringComparer.InvariantCultureIgnoreCase);
foreach (DataRow oRow in DTgraph.Rows)
{
var sKey = oRow["Campaign"].ToString();
if (!cRows.ContainsKey(sKey))
{
cRows.Add(sKey, oRow);
}
else
{
cRows[sKey] = oRow;
}
}
var oNewTable = DTgraph.Clone();
foreach (var oRow in cRows.Values)
{
oNewTable.Rows.Add(oRow);
}
如你所见,我把数据放在字典里,最后把字典转成数据表。
我的问题是在这一行:
cRows.Add(sKey, oRow);
我得到一个错误:
The row is already belongs to another datatable
注意:我需要解决那个异常,我不需要新的方法来实现我的目标
注意:我错了,异常在这一行
oNewTable.Rows.Add(oRow);
使用新 table 的 NewRow()
函数,然后使用 oRow.ItemArray
属性 从源行获取值并将它们复制到新创建的行的 ItemArray
.一个例子是:
Array.Copy(oRow.ItemArray, oNewTable.NewRow().ItemArray, oRow.ItemArray.Length)
但是,请记住,这不会保留源行的原始值和当前状态(我认为您无论如何都不会在此处使用)。如果这些事情很重要,请寻求 ImportRow()
解决方案,在复制时保留源行的状态。
老实说,我不是 100% 理解你的问题,但是要修复异常:
The row is already belongs to another datatable.
变化:
oNewTable.Rows.Add(oRow);
收件人:
oNewTable.ImportRow(oRow);
或者创建一个新行并克隆 ItemArray。
foreach (var oRow in cRows.Values)
{
var newRow = oNewTable.NewRow();
newRow.ItemArray = oRow.ItemArray.Clone() as object[];
oNewTable.Rows.Add(newRow);
}