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);
}