c#添加已属于数据表的行

时间:2015-02-22 09:07:56

标签: c# 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);

我收到错误:

  

该行已属于另一个数据表

注意:我需要解决这个异常,我不需要一种新方法来实现我的目标

注意:我错了,例外就在这一行

oNewTable.Rows.Add(oRow);

2 个答案:

答案 0 :(得分:2)

说实话,我不会100%理解你的问题,但要解决这个例外:

  

该行已属于另一个数据表。

变化:

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

答案 1 :(得分:1)

使用新表的NewRow()函数,然后使用oRow.ItemArray属性从源行获取值,并将新创建的行复制ItemArray。一个例子是:

Array.Copy(oRow.ItemArray, oNewTable.NewRow().ItemArray, oRow.ItemArray.Length)

但是,请记住,这不会保留源行中的原始值和当前状态(我认为你不会在这里使用它)。如果这些事情很重要,请选择ImportRow()解决方案,以便在复制时保留源行的状态。