参考问题Modify rows added into dataset,如果我需要在数据集1行之间的某处包含数据集2,我该怎么办?
比如说;
数据集1
第1行 第2行 第3行 第4行
DataSet 2
A行 B行 第C行
因此,这应该像
第1行 A行 第2行 第3行 B行 第4行 第C行
答案 0 :(得分:2)
您可以使用InsertAt方法
var row = dataSet2.Tables[0].NewRow();
// Copy rowA to row
dt.Rows.InsertAt(row, position);
答案 1 :(得分:1)
首先,数据表有行,数据集包含数据表。 要将行插入特定索引,可以使用InsertAt方法。
myDataTable.Rows.InsertAt(myNewRow, indexToInsertTo);
答案 2 :(得分:0)
好的,根据Peyman的答案中的评论,这是一个蛮力方法,基于以下假设:
如果表1中的给定行在“A”列中具有“Y”,则在表1中的当前行之后插入表2中的一行。每次满足此条件时,从表2中取出下一个未使用的行。
我会在前面说这是丑陋的,并且容易出现很多问题,并且可能有更好的方法(LINQ?),也许是Xor试图完成的解释(即,它背后的概念/规则/逻辑可能会导致更好或替代的解决方案。
这里是:
int tbl1Index = 0;
int tbl1Rows = dataset1.Tables[0].Rows.Count;
int tbl2Index = 0;
int tbl2Rows = dataset2.Tables[0].Rows.Count;
DataRow row;
// Do this loop until either tbl1 has been gone through completely or table 2 has been gone
// through completely, whichever comes first.
while (tbl1Index < tbl1Rows && tbl2Index < tbl2Rows)
{
if (dataset1.Tables[0].Rows[tbl1Index]["A"].ToString() == "Y")
{
// Copy the next available row from table 2
row = dataset2.Tables[0].Rows[tbl2Index];
// Insert this row after the current row in table 1
dataset1.Tables[0].Rows.InsertAt(row, tbl1Index + 1);
// Increment the tbl1Index. We increment it here because we added a row, even
// though we'll increment tbl1Index again before the next iteration of the while loop
tbl1Index++;
// Since we just inserted a row, we need to increase the count of rows in table 1 to
// avoid premature exit of the while loop
tbl1Rows++;
// Increment tbl2Index so the next time a match occurs, the next row will be grabbed.
tbl2Index++;
}
// Increment tbl1Index. If there was a match above, we'll still need to increment to
// account for the new row.
tbl1Index++;
}
哇......真的,真的,真的很丑......