DataRow从具有额外列的另一个DataRow复制值

时间:2015-05-08 20:07:18

标签: c# datarow

我在一个带有2个字符串列的相应DataTable中有一个像{“Foo”,“Bar”}这样的DataRow。我想这一行复制到一个新的DataTable,它有 3 字符串列,其中第0列是我要传入的新值。因此,生成的行应该看起来像{“我的”,“Foo”,“Bar”}。

冲洗,重复。另一个复制操作就像{“Bob”,“Smith”} => {“我的”,“鲍​​勃”,“史密斯”}。

我尝试在Array.Copy()和myDataRow.ItemArray.CopyTo(otherDataRow.ItemArray)中使用DataRow.ItemArray。然后我读到这不起作用,因为ItemArray有点只读,尽管intellisense告诉你。

当然,我可以编写自己的循环来逐列复制值,但是.. 为什么这不是内置于库中的东西?

采样代码:

DataTable dtDestination = new DataTable();
DataTable dtSource = new DataTable();

dtSource.Columns.Add("Str1");
dtSource.Columns.Add("Str2");

dtDestination.Columns.Add("Str0");
dtDestination.Columns.Add("Str1");
dtDestination.Columns.Add("Str2");

dtSource.Rows.Add("Foo", "Bar");
dtSource.Rows.Add("Bob", "Smith");

foreach (DataRow drSrc in dtSource.Rows)
{
    DataRow drNew = dtDestination.NewRow();
    drNew["Str0"] = "My";

    //this doesn't work
    Array.Copy(drSrc.ItemArray, 0, drNew.ItemArray, 1, drSrc.ItemArray.Length);

    //this doesn't work either
    drSrc.ItemArray.CopyTo(drNew.ItemArray, 1);

    //I want to add the "new row" to my destination table,
    //*WITH* the contents from the source-row plus the "My" value in the 0th column!
    dtDestination.Rows.Add(drNew);
}

3 个答案:

答案 0 :(得分:1)

如果没有SetValue,则无法设置.ItemArray值 但是你可以设置ItemArray本身

function(){
    // Push new objects in model.messages into loadedModels
}.observes('model.messages.@each')

您应该将测试值添加到源,而不是目标表...

答案 1 :(得分:1)

创建扩展方法:

public static void CopyValuesFrom(this DataRow me, DataRow copyFrom, int insertIndex = 0, int copyIndex = 0, int count = 0)
{
    if (count == 0)
        count = Math.Min(copyFrom.ItemArray.Length - copyIndex, me.ItemArray.Length - insertIndex);
    for (var i = 0; i < count; i++)
        me[insertIndex + i] = copyFrom[copyIndex + i];
}

复制:

drNew.CopyValuesFrom(drSrc, 1);

答案 2 :(得分:0)

有一种直接的方法可以做到这一点,只需使用ImportRow方法,另外在此附加列的供应值之后