【发布时间】:2023-03-16 03:55:01
【问题描述】:
如何在 c# 中将特定行从 DataTable 复制到另一个 Datable?会有不止一排。
【问题讨论】:
如何在 c# 中将特定行从 DataTable 复制到另一个 Datable?会有不止一排。
【问题讨论】:
foreach (DataRow dr in dataTable1.Rows) {
if (/* some condition */)
dataTable2.Rows.Add(dr.ItemArray);
}
以上示例假设dataTable1 和dataTable2 具有相同的列数、类型和顺序。
【讨论】:
ItemArray 部分时才会发生这种情况。确保您添加的是行的值,而不是行本身。
DataTable.Clone 方法:msdn.microsoft.com/en-us/library/…
试试这个
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);
}
}
【讨论】:
看看这个,你可能会喜欢(之前请克隆 table1 到 table2):
table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);
或者:
table1.AsEnumerable().Where ( yourcondition ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
【讨论】:
下面的示例是复制一行的最快方法。 正在根据列名复制每个单元格。 如果您不需要复制特定的单元格,请尝试捕获或添加 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);
dataset1.Tables[1].Rows[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));
【讨论】:
sourceTable,destTable 也会清除吗?
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);
}
【讨论】:
for,而不是使用foreach (Datarow dr...)
有更好的方法来做到这一点。
数据表 targetDataTable = new DataTable(); targetDataTable = changedColumnMetadata.AsEnumerable().Where(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);
}
【讨论】: