Respostas:
foreach (DataRow dr in dataTable1.Rows) {
if (/* some condition */)
dataTable2.Rows.Add(dr.ItemArray);
}
O exemplo acima assume que dataTable1
e dataTable2
tem o mesmo número, tipo e ordem de colunas.
ItemArray
parte no final da expressão. Certifique-se de adicionar os valores da linha, não a própria linha.
DataTable.Clone
método: msdn.microsoft.com/en-us/library/...
Copiar linhas especificadas da tabela para outra
// 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);
}
}
Tente isto
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);
}
Verifique isso, você pode gostar (anteriormente, por favor, clone a tabela1 para a tabela2):
table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);
Ou:
table1.AsEnumerable().Where ( yourcondition ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
Com suporte em: 4, 3.5 SP1, agora você pode apenas chamar um método no objeto.
DataTable dataTable2 = dataTable1.Copy()
Como resultado das outras postagens, este é o mais curto que pude obter:
DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
sourceTable
vontade, destTable
também limpará?
a amostra abaixo seria a maneira mais rápida de copiar uma linha. cada célula está sendo copiada com base no nome da coluna. caso você não precise de uma célula específica para copiar, tente capturar ou adicionar se. se você copiar mais de uma linha, faça um loop no código abaixo.
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);
conjunto de dados1.Tabelas [1]. Linhas [ 0 ] [i]; altere o índice 0 para o índice de linha especificado ou você pode usar uma variável se for fazer um loop ou se for lógico
Para quem deseja consulta SQL de comando único para isso:
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;
Essa consulta copiará os dados de TABLE001
para TABLE002
e supomos que as duas colunas tenham nomes de colunas diferentes.
Os nomes das colunas são mapeados individualmente, como:
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
Você também pode especificar a cláusula where, se precisar de alguma condição.
Para copiar toda a tabela de dados, faça o seguinte:
DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;
Eu criei uma maneira fácil de fazer esse problema
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);
}