Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否将行从一个数据表复制到另一个数据表?_C#_Datatable - Fatal编程技术网

C# 是否将行从一个数据表复制到另一个数据表?

C# 是否将行从一个数据表复制到另一个数据表?,c#,datatable,C#,Datatable,如何将特定行从DataTable复制到c#中的另一个DataTable?将有多行 foreach (DataRow dr in dataTable1.Rows) { if (/* some condition */) dataTable2.Rows.Add(dr.ItemArray); } 上面的示例假设dataTable1和dataTable2具有相同的列数、类型和顺序。试试这个 String matchString="ID0001"//assuming we

如何将特定行从DataTable复制到c#中的另一个DataTable?将有多行

foreach (DataRow dr in dataTable1.Rows) {
    if (/* some condition */)
        dataTable2.Rows.Add(dr.ItemArray);
}
上面的示例假设
dataTable1
dataTable2
具有相同的列数、类型和顺序。

试试这个

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

或:


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

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);
DataRow dr=dataset1.Tables[0].NewRow();
对于(int i=0;i

数据集1.表[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));

要复制整个数据表,只需执行以下操作:

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\u MEM\u ID->COL001\u MEM\u ID

COL001\u MEM\u NAME->COL002\u MEM\u NAME

COL001_MEM_ADD->COL002_MEM_ADD

COL001\u创建用户\u C->COL002\u创建用户\u C

COL002\u创建->COL002\u创建


如果需要一些条件,您还可以指定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 newTable=oldtable.Clone();
对于(int i=0;i
有更好的方法可以做到这一点

DataTable targetDataTable=新DataTable(); targetDataTable=changedColumnMetadata.AsEnumerable().Where(dataRow=>entityName.Equals(dataRow[“entityName”])).CopyToDataTable()

请尝试此方法,并在出现任何问题时通知我。

您可以调用此方法,例如:

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


这不会导致“这一行已经属于另一个表了。”@McArthey不,不会;正在根据现有行中的值创建新行。行本身没有被添加到另一个数据表中。@dawoodabasi只有当您省略表达式末尾的
ItemArray
部分时,才会发生这种情况。确保您添加的是行的值,而不是行本身。@Dawoodabasi请参阅MSDN文档中的
DataTable.Clone
方法:虽然您的回答在技术上是正确的,但您的代码示例并没有满足您的假设。@RageeshGr的答案处理了所有的假设,IMHO写得更简洁,更不容易出错。从技术上讲,这会创建一个数据表的副本。虽然问题中没有明确说明,但有可能dataTable2已经存在,并且其中还有我们不想丢失的其他行。此外,这个问题特别指出“特定行”,而这只处理所有行。这基本上是一个foreach。此外,您没有按照OP的要求筛选条件。现在,如果我清除
源表
目标表
也会清除吗?我希望能够分配一个值并清除原始变量,而无需清除目标。您的代码对我来说非常好,是一个非常简单的代码,感谢这是一种更好的方法,因为它使用内置功能将行从一个数据表复制到另一个数据表,甚至选择行,而无需显式遍历每个数据表,这与所有基于foreach方法的foreach循环不同。问题在于如何从数据表复制特定行,不是全部。如果导入后我不再需要使用dttableOld,我还需要使用Clone()吗?非常好而且实用!谢谢@Sam关于你的问题,克隆就是复制表结构,如果你的表已经是相同的数据类型,那么你就不需要它了。有更好的方法可以做到这一点。entityColumnMetadata=changedColumnMetadata.AsEnumerable().Where(dataRow=>entityName.Equals(dataRow[“entityName”])).CopyToDataTable()@ManojSavalia,那么什么是不牺牲性能的替代方案呢?更简单的方法是使用
for
,而不是使用
foreach(Datarow dr…)
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;
 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);   
 } 
   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);