在数据集之间插入行

时间:2011-08-02 07:14:21

标签: c# .net asp.net visual-studio dataset

参考问题Modify rows added into dataset,如果我需要在数据集1行之间的某处包含数据集2,我该怎么办?

比如说;

数据集1

第1行 第2行 第3行 第4行

DataSet 2

A行 B行 第C行

因此,这应该像

第1行 A行 第2行 第3行 B行 第4行 第C行

3 个答案:

答案 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++;
}
哇......真的,真的,真的很丑......