ฉันจะคัดลอกแถวเฉพาะจาก DataTable ไปยังอีก Datable ใน c # ได้อย่างไร จะมีมากกว่าหนึ่งแถว
ฉันจะคัดลอกแถวเฉพาะจาก DataTable ไปยังอีก Datable ใน c # ได้อย่างไร จะมีมากกว่าหนึ่งแถว
คำตอบ:
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 ถึง 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
ยังชัดเจน?
ตัวอย่างด้านล่างเป็นวิธีที่เร็วที่สุดในการคัดลอกหนึ่งแถว แต่ละเซลล์จะถูกคัดลอกตามชื่อคอลัมน์ ในกรณีที่คุณไม่ต้องการเซลล์ที่เฉพาะเจาะจงในการคัดลอกจากนั้นลองจับหรือเพิ่มถ้า หากคุณต้องการคัดลอกมากกว่า 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);
ชุดข้อมูล 1 ตาราง [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.
}
สำหรับผู้ที่ต้องการคำสั่ง 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
นอกจากนี้คุณยังสามารถระบุตำแหน่งของประโยคถ้าคุณต้องการเงื่อนไขบางอย่าง
หากต้องการคัดลอกข้อมูลทั้งหมดเพียงทำสิ่งนี้:
DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;
ฉันได้สร้างวิธีง่ายๆในการแก้ไขปัญหานี้
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);
}