Копировать строки из одного Datatable в другой DataTable?

Как скопировать определенные строки из DataTable в другую Datable в C#? Будет несколько рядов.

8 ответов


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

В приведенном выше примере предполагается, что dataTable1 и dataTable2 имеют одинаковое количество, тип и порядок столбцов.


скопируйте указанные строки из таблицы в другую

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

Попробуй Такое

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

проверьте это, вам может понравиться (ранее, пожалуйста, клонируйте table1 в table2):

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

или:

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

поддерживается в: 4, 3.5 SP1, теперь вы можете просто вызвать метод на объекте.

DataTable dataTable2 = dataTable1.Copy()

в результате других сообщений это самое короткое, что я мог получить:

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

ниже образца будет самый быстрый способ скопировать одну строку. каждая ячейка копируется на основе имени столбца. если вам не нужна конкретная ячейка для копирования, попробуйте поймать или добавить 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.Таблицы[1].Строки[0][i]; измените индекс 0 на указанный индекс строки или вы можете использовать переменную, если ваш цикл или если он будет логическим


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