Добавить строку между другими строками - PullRequest
1 голос
/ 08 марта 2019

У меня есть дата, содержащая 7 столбцов. Один из столбцов - «Unit-Nr». Обычно ячейки в этом столбце будут выглядеть примерно так:

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

Я пытаюсь добиться поведения, чтобы я мог "разделить" строки, вставив новое значение datarow между новым '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 ]

2 голосов
/ 08 марта 2019

Вы должны вставлять строки в положение, в котором вы находитесь в данный момент, а не с -1.

Вы получаете исключение вне диапазона, потому что ваш код добавляет бесконечное количество пустых строк, вы можете остановить это, увеличив I после вставки пустой строки.

Еще один совет, i> 0 можно пропустить, если запустить цикл for с 1 вместо 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++;
    }
}
0 голосов
/ 08 марта 2019

В 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++;
            }
        }

Надеюсь, это работает.

...