在其他行之间添加行

时间:2019-03-08 10:25:57

标签: c# datatable space datarow

我有一个数据表,包含7列。列之一是“ Unit-Nr”。通常,该列中的单元格看起来像这样:

Unit-Nr
A-55
A-55
A-55
A-52
A-52
A-52
A-50

我正在尝试实现某种行为,因此我可以通过在新的“ Unit-Nr”之间插入新的数据行来“分隔”行。所以看起来像这样:

Unit-Nr
A-55
A-55
A-55

A-52
A-52
A-52

A-50

到目前为止,我一直在尝试下面的代码,但这给了我System.OutOfMemoryException

for (int i = 0; i < dt.Rows.Count; i++)
{
    if (i > 0 && dt.Rows[i][0].ToString() != dt.Rows[i - 1][0].ToString())
    {
        DataRow row = dt.NewRow();
        object[] oArray = new object[] { "", "", "", "", "", "", "" };

        row.ItemArray = oArray;

        dt.Rows.InsertAt(row, i - 1);
    }
}

2 个答案:

答案 0 :(得分:2)

您应将行插入到当前位置,而不是-1。

由于代码添加了无限数量的空行,因此出现了超出范围的异常,可以通过在插入空行后增加I来停止此行。

另一个提示,如果以1(而不是0)开始for循环,则可以跳过i> 0

for (int i = 1; i < dt.Rows.Count; i++)
{
    if (dt.Rows[i][0].ToString() != dt.Rows[i - 1][0].ToString())
    {
        DataRow row = dt.NewRow();
        object[] oArray = new object[] { ""};

        row.ItemArray = oArray;

        dt.Rows.InsertAt(row, i);
        i++;
    }
}

答案 1 :(得分:0)

for循环中,dt.Rows.Count一直在增加。这是无尽的循环。因为您要在每个步骤中添加新行。 您需要在i

内增加if (i > 0 && dt.Rows[i][0].ToString() != dt.Rows[i - 1][0].ToString())索引

尝试一下,

for (int i = 1; i < dt.Rows.Count; i++)
        {
            if (dt.Rows[i][0].ToString() != dt.Rows[i - 1][0].ToString())
            {
                DataRow row = dt.NewRow();
                object[] oArray = new object[] { "", "", "", "", "", "", "" };

                row.ItemArray = oArray;

                dt.Rows.InsertAt(row, i - 1);
                i++;
            }
        }

希望如此。