【问题标题】:Copy a DataRow with an extra column复制带有额外列的 DataRow
【发布时间】:2016-05-26 14:58:16
【问题描述】:

我正在尝试使用 c# 向已经存在的 DataTable 添加一个新列。

我能做的最好的事情是按照herehere 中的说明实际复制每个DataRow,但没有成功,因为这些答案明确表示DataTable 必须具有相同的列。每当我尝试向新列添加任何类型的值时(位于名为 dt 的新 DataTable 的末尾,我都会留下一个行数相同但根本没有值的 DataTable。

foreach (DataRow dr in ret.Rows)
{
    dt.Rows.Add(dr.ItemArray, "1");
}

ret 是一个包含 X 列和 N 行的 DataTable。

dt 是一个包含 X+1 列和 N 行的 DataTable。

【问题讨论】:

    标签: c# datatable datarow


    【解决方案1】:

    这应该可以正常工作:

    foreach (DataRow dr in ret.Rows)
    {
        DataRow row = dt.Rows.Add();
        for (int i = 0; i < dr.ItemArray.Length; i++)
            row.SetField(i, dr.ItemArray[i]);
        row.SetField(dt.Columns.Count - 1, "1");
    }
    

    另一种方法是将DefaultValue 分配给最后一列,因为您始终使用相同的常量值:

    dt.Columns[dt.Columns.Count - 1].DefaultValue = "1";
    

    现在您无需提供此值。你可以使用DataTable.Merge:

    dt.Merge(ret);
    

    【讨论】:

    • 是的。做到了。我有点担心我可能会得到的性能,但它有效。谢谢!
    • @MiquelColl:性能不是问题。所有 .NET 方法(如 DataTable.ImportRow)都使用类似的循环,但有额外的开销。
    • @MiquelColl:但有一个错误,我使用dr.SetField 而不是row.SetField。我还提供了另一种方法。
    • 我使用了您提供的第一个代码 row[i] 也很有效。和 setField 有什么区别?
    • 没有默认值,我只是在其中输入 1 以降低问题的复杂性。不管怎样,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多