将行从一个Datatable复制到另一个DataTable?

问题描述:

如何从DataTable复制特定行到另一个在c#中的Datable?将会有不止一行。将行从一个Datatable复制到另一个DataTable?

foreach (DataRow dr in dataTable1.Rows) { 
    if (/* some condition */) 
     dataTable2.Rows.Add(dr.ItemArray); 
} 

上面示例假定​​和dataTable2具有相同的数量,类型和列的顺序。

+8

这是不是结果。“该行已属于 另一个表” – McArthey 2012-06-06 19:59:20

+8

@McArthey不,它不会;正在从现有行中的值创建新行。该行本身不会被添加到其他DataTable中。 – 2012-06-07 00:31:19

+0

这导致“输入数组长度超过此表中的列数”。 – Vinod 2012-10-21 11:46:38

尝试这个

String matchString="ID0001"//assuming we have to find rows having key=ID0001 
    DataTable dtTarget = new DataTable(); 
    dtTarget = dtSource.Clone(); 
    DataRow[] rowsToCopy; 
    rowsToCopy = dtSource.Select("key='" + matchString + "'"); 
    foreach (DataRow temp in rowsToCopy) 
    { 
     dtTarget.ImportRow(temp); 
    } 
+0

答案很好,但性能下降。 – 2012-07-24 11:55:19

复制表指定行到另一

// here dttablenew is a new Table and dttableOld is table Which having the data 

dttableNew = dttableOld.Clone(); 

foreach (DataRow drtableOld in dttableOld.Rows) 
{ 
    if (/*put some Condition */) 
    { 
     dtTableNew.ImportRow(drtableOld); 
    } 
} 

检查了这一点,你可能会喜欢它(之前,请克隆表1至表2):

table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges); 

或者:

table1.AsEnumerable().Where (yourcondition ) .CopyToDataTable(table2,LoadOption.OverwriteChanges); 

下面的示例将是复制一行的最快方法。 根据列名称正在复制每个单元格。 万一你不需要一个特定的单元格复制,然后尝试捕获或添加如果。 如果您要复制多于一行然后循环下面的代码。

DataRow dr = dataset1.Tables[0].NewRow(); 
for (int i = 0; i < dataset1.Tables[1].Columns.Count; i++) 
{ 
    dr[dataset1.Tables[1].Columns[i].ColumnName] = dataset1.Tables[1].Rows[0][i]; 
} 

datasetReport.Tables[0].Rows.Add(dr); 

dataset1.Tables [1] .Rows [] [I];将索引0更改为指定的行索引,或者如果要进入循环或将其变为逻辑,则可以使用变量

受以下版本支持:4,3.5 SP1,现在可以在对象上调用方法。

DataTable dataTable2 = dataTable1.Copy() 
+0

从技术上讲,这会创建一个数据表的副本。虽然在问题中没有明确说明,但dataTable2可能已存在,并且其中有其他行,我们不想丢失。此外,该问题明确指出“特定行”,而这只能处理所有行。 – Matt 2016-03-08 22:24:18

至于其他职位的结果,这是最短的,我可以得到:

DataTable destTable = sourceTable.Clone(); 
sourceTable.AsEnumerable().Where(row => /* condition */).ToList().ForEach(row => destTable.ImportRow(row)); 
+0

这基本上是一个foreach。此外,您没有按照OP的要求筛选条件。 – 2016-07-20 19:51:08

+0

现在,如果我清除'sourceTable',那么'destTable'也会清除? – Si8 2017-02-20 15:00:53

+0

我希望能够分配一个值并清除原始变量而不清除目标。 – Si8 2017-02-20 15:05:09

private void CopyDataTable(DataTable table){ 
    // Create an object variable for the copy. 
    DataTable copyDataTable; 
    copyDataTable = table.Copy(); 
    // Insert code to work with the copy. 
} 
+0

你的代码对我来说很完美,是一个非常简单的代码,谢谢 – 2017-06-28 13:17:04