将行从一个数据表复制到另一个数据表?

如何将特定的行从 DataTable 复制到 c # 中的另一个数据表。

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

上面的示例假设 dataTable1dataTable2具有相同的列数、类型和顺序。

试试这个

    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);
}

将指定行从表复制到另一个表

// 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);

下面的示例将是复制一行的最快方法。 正在根据列名复制每个单元格。 如果你不需要一个特定的单元格来复制,那么有一个 try catch 或者 add if。 如果要复制多于1行,那么循环下面的代码。

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);

数据集1.Tables [1]。行[ 0][ i ] ; 将索引0更改为您指定的行索引,或者您可以使用一个变量,如果您要循环或如果它将是逻辑的

支持: 4,3.5 SP1,您现在可以只调用对象的方法。

DataTable dataTable2 = dataTable1.Copy()

由于其他的帖子,这是我能找到的最短的:

DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
 private void CopyDataTable(DataTable table){
// Create an object variable for the copy.
DataTable copyDataTable;
copyDataTable = table.Copy();
// Insert code to work with the copy.
}

要复制整个数据表,只需这样做:

DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;

对于那些需要单命令 SQL 查询的用户:

INSERT INTO TABLE002
(COL001_MEM_ID, COL002_MEM_NAME, COL002_MEM_ADD, COL002_CREATE_USER_C, COL002_CREATE_S)
SELECT COL001_MEM_ID, COL001_MEM_NAME, COL001_MEM_ADD, COL001_CREATE_USER_C, COL001_CREATE_S
FROM TABLE001;

这个查询将把数据从 TABLE001复制到 TABLE002,我们假设这两个列具有不同的列名。

列名是一对一映射的,比如:

COL001 _ MEM _ ID-> COL001 _ MEM _ ID

COL001 _ MEM _ NAME-> COL002 _ MEM _ NAME

COL001 _ MEM _ ADD-> COL002 _ MEM _ ADD

COL001 _ CREATE _ USER _ C-> COL002 _ CREATE _ USER _ C

COL002 _ CREATE _ S-> COL002 _ CREATE _ S

如果需要某些条件,还可以指定 where 子句。

我已经创造了一个简单的方法来解决这个问题

 DataTable newTable = oldtable.Clone();
for (int i = 0; i < oldtable.Rows.Count; i++)
{
DataRow drNew = newTable.NewRow();
drNew.ItemArray = oldtable.Rows[i].ItemArray;
newTable.Rows.Add(drNew);
}

还有更好的办法。

DataTable targetDataTable = new DataTable () ; 其中(dataRow = > entityName. Equals (dataRow [“ EntityName”]) . CopyToDataTable () ;

请尝试这个,让我知道,以防任何问题。

你可以调用 DataTable. Copy ()方法,例如:

   DataSet ds = new DataSet();
System.Data.DataTable dt = new System.Data.DataTable();
dt = _BOSearchView.DS.Tables[BusLib.TPV.TableName.SearchView].Copy();
ds.Tables.Add(dt);
UltGrdSaleExcel.SetDataBinding(ds, dt.TableName, true);

我需要将具有相同结构的多个表中的行复制到一个新表中,以用作 datagridview 的数据源:

// Generate DataTable[] alltables from multiple datatables


DataTable newTable = alltables[0].Clone();
foreach (DataTable dt in alltables)
{
for (int i = 0; i < dt.Rows.Count; i++)
newTable.Rows.Add(dt.Rows[i].ItemArray);
}

使用 Merge,这将使用 oldDateTale 追加 newDataTable 的所有行

oldDateTale.Merge(newDataTable);