Câu trả lời:
foreach (DataRow dr in dataTable1.Rows) {
if (/* some condition */)
dataTable2.Rows.Add(dr.ItemArray);
}
Ví dụ trên giả định rằng dataTable1
và dataTable2
có cùng số lượng, loại và thứ tự các cột.
ItemArray
phần cuối của biểu thức. Hãy chắc chắn rằng bạn đang thêm các giá trị của hàng, chứ không phải chính hàng đó.
DataTable.Clone
phương pháp: msdn.microsoft.com/en-us/l
Sao chép các hàng được chỉ định từ bảng này sang bảng khác
// 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);
}
}
Thử cái này
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);
}
Hãy xem cái này, bạn có thể thích nó (trước đây, làm ơn, sao chép bảng1 vào bảng2):
table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);
Hoặc là:
table1.AsEnumerable().Where ( yourcondition ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
Được hỗ trợ trong: 4, 3.5 SP1, bây giờ bạn có thể chỉ cần gọi một phương thức trên đối tượng.
DataTable dataTable2 = dataTable1.Copy()
Kết quả của các bài đăng khác, đây là bài viết ngắn nhất tôi có thể nhận được:
DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
sourceTable
cũng sẽ destTable
rõ?
mẫu dưới đây sẽ là cách nhanh nhất để sao chép một hàng. mỗi ô đang được sao chép dựa trên tên cột. trong trường hợp bạn không cần một ô cụ thể để sao chép thì hãy thử hoặc thêm nếu. nếu bạn định sao chép nhiều hơn 1 hàng thì lặp mã bên dưới.
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);
tập dữ liệu1.Tables [1] .Rows [ 0 ] [i]; thay đổi chỉ số 0 thành chỉ mục hàng được chỉ định của bạn hoặc bạn có thể sử dụng một biến nếu vòng lặp của bạn hoặc nếu nó sẽ hợp lý
Đối với những người muốn truy vấn SQL lệnh đơn cho điều đó:
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;
Truy vấn này sẽ sao chép dữ liệu từ TABLE001
đến TABLE002
và chúng tôi giả sử rằng cả hai cột có tên cột khác nhau.
Tên cột được ánh xạ một-một như:
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
Bạn cũng có thể chỉ định mệnh đề where, nếu bạn cần một số điều kiện.
Để sao chép toàn bộ dữ liệu chỉ cần làm điều này:
DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;
Tôi đã tạo ra một cách dễ dàng để làm vấn đề này
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);
}