我有一个数据表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);
答案 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()
解决方案,以便在复制时保留源行的状态。