【问题标题】:Transfer specific data from 1 datatable to another error将特定数据从 1 个数据表传输到另一个错误
【发布时间】:2014-07-02 07:42:54
【问题描述】:

如何将我的一个数据表的内容转移到一个新的数据表?我正在过滤掉我的数据表的内容,因为当我选中某些复选框时过滤会起作用。所以我所做的就是这样做:

//dt & dt2 are Datatables, dt has all of the data and dt2 is a blank Datatable
string fieldcheck=  "2"
for (var f = 0; f < dt.Rows.Count; f++ )
{
    if (dt.Rows[f]["nameID"].ToString() == fieldcheck)
    {
        dt2.Rows.Add(dt.Rows[f]);
    }
}

但是一个错误是说该行已经属于另一个表。如何将特定行传输到空数据表?

【问题讨论】:

    标签: c# asp.net datatable row


    【解决方案1】:

    您不能将DataRow 添加到属于另一个DataTable 的DataTable。请注意,每一行都通过Table property 引用它的表。

    您要么必须通过复制所有字段手动添加它们,要么使用DataTable.ImportRow:

    dt2.ImportRow(dt.Rows[f]);
    

    满足您要求的另一种方法是使用Linq-To-DataTable,它可以简化您的代码:

    var matchingRows = dt.AsEnumerable()
        .Where(r => r.Field<string>("Name") == fieldcheck)
    DataTable dt2 = matchingRows.Any() ? matchingRows.CopyToDataTable() : dt.Clone();
    

    请注意,如果没有匹配的行,CopyToDataTable 会引发异常。这就是为什么我使用条件运算符和DataTable.Clone 作为后备值,它创建了一个具有相同架构的空表。

    【讨论】:

    • CopyToDataTable 在结果集合不返回任何内容时给出错误。
    • @NikhilAgrawal:很好,我已经相应地编辑了答案。
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多