Ответы:
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/…
Копировать указанные строки из таблицы в другую
// 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 to 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));
sourceTable
волю, то destTable
тоже проясню?
Пример ниже будет самый быстрый способ скопировать одну строку. каждая ячейка копируется на основе имени столбца. если вам не нужна определенная ячейка для копирования, попробуйте 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);
dataset1.Tables [1] .Rows [ 0 ] [i]; измените индекс 0 на указанный вами индекс строки или вы можете использовать переменную, если вы собираетесь зацикливаться или если она будет логической
Для тех, кто хочет 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
Вы также можете указать, где предложение, если вам нужно какое-то условие.
Я создал простой способ сделать эту проблему
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);
}