在其他行之间添加行
Add row between other rows
我有一个数据表,包含 7 列。其中一列是 'Unit-Nr'。通常该列中的单元格如下所示:
Unit-Nr
A-55
A-55
A-55
A-52
A-52
A-52
A-50
我正在尝试实现一种行为,因此我可以通过在新 'Unit-Nr' 之间插入新数据行来 "seperate" 行。所以它看起来像这样:
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);
}
}
在for
循环中,dt.Rows.Count
一直递增。这是无限循环。因为您在每个步骤中都添加了新行。
您需要在 if (i > 0 && dt.Rows[i][0].ToString() != dt.Rows[i - 1][0].ToString())
中增加 i
索引
试试这个,
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++;
}
}
希望,成功了。
您应该在您当时所在的位置插入行,而不是 -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++;
}
}
我有一个数据表,包含 7 列。其中一列是 'Unit-Nr'。通常该列中的单元格如下所示:
Unit-Nr
A-55
A-55
A-55
A-52
A-52
A-52
A-50
我正在尝试实现一种行为,因此我可以通过在新 'Unit-Nr' 之间插入新数据行来 "seperate" 行。所以它看起来像这样:
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);
}
}
在for
循环中,dt.Rows.Count
一直递增。这是无限循环。因为您在每个步骤中都添加了新行。
您需要在 if (i > 0 && dt.Rows[i][0].ToString() != dt.Rows[i - 1][0].ToString())
i
索引
试试这个,
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++;
}
}
希望,成功了。
您应该在您当时所在的位置插入行,而不是 -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++;
}
}