在数据集之间插入行

本文关键字:插入 之间 数据集 | 更新日期: 2023-09-27 18:04:18

参考问题修改行添加到数据集,我应该怎么做,如果我需要包括数据集2行之间的数据集1行?

举个例子;

数据集1

第一行
第2行
第3行
第4行

2

数据集

A行
第B行
C行

因此,这应该像

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

在数据集之间插入行

您可以使用InsertAt方法

var row = dataSet2.Tables[0].NewRow();
// Copy rowA to row
dt.Rows.InsertAt(row, position);

首先,数据表包含行,数据集包含数据表。可以使用InsertAt方法向指定索引插入行。

myDataTable.Rows.InsertAt(myNewRow, indexToInsertTo);

好的,根据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++;
}

哇……这真的,真的,真的很丑....