2

データベースから入力したDataTableがあり、背後にあるコードで、各行の後にさらに3行を追加しようとしています。以下はコードです。しかし、6行目で私は得ます

タイプ'System.OutOfMemoryException'の例外がスローされました。

  for (int i = 0; i < AlldaysList.Rows.Count; i++)
    {
        DataRow row;
        row = AlldaysList.NewRow();
        DataRow row1;
        row1 = AlldaysList.NewRow();
        DataRow row2;
        row2 = AlldaysList.NewRow();

        // Then add the new row to the collection.
        row["scenarionid"] = DBNull.Value;
        row["description"] = "";
        row1["scenarionid"] = DBNull.Value;
        row1["description"] = "";
        row2["scenarionid"] = DBNull.Value;
        row2["description"] = "";
        AlldaysList.Rows.InsertAt(row, i + 1);
        AlldaysList.Rows.InsertAt(row1, i + 2);
        AlldaysList.Rows.InsertAt(row2, i + 3);
        i++;
    }
4

3 に答える 3

4
//This could be the problem
i < AlldaysList.Rows.Count

int rowCount = AlldaysList.Rows.Count; という変数が必要だと思います。ループの前に..

the loop should be  for (int i = 0; i < rowCount; i++)

私がこれを言う理由は、ループ内に 3 行を追加すると、AlldaysList.Rows.Count が +3 変化し、ur が静的変数ではなく動的変数をターゲットにしているため、再びループに入り、例外が発生するためです。 ..

于 2013-01-28T10:03:25.813 に答える
1

私はあなたがこのようなことをすべきだと思います:

int origRowCount = AlldaysList.Rows.Count;
for (int i = 0; i < origRowCount; i++)
{
    for (int j = 1; j <= 3; j++)
    {
        AlldaysList.Rows.InsertAt(MakeNewAlldaysRow(AlldaysList), i * 4 + j);
    }
}

// ....
// (separate method)
static DataRow MakeNewAlldaysRow(DataTable table)
{
    DataRow row = table.NewRow();
    row["scenarionid"] = DBNull.Value;
    row["description"] = "";

    return row;
}

行のリストが増加するため、行の追加を開始するに行数を書き留めておく必要があります。また、挿入位置は4ずつ増加するため、i * 4 + j.

于 2013-01-28T10:05:50.287 に答える
0

コードの一般化されたバージョンでは、変数 RowsToAdd の値を変更するだけで任意の数の行を追加できます。3 つの DataRow 変数 (row、row1、row2) をクレートする必要はありません...

int RowsToAdd=3
int rowCount = AlldaysList.Rows.Count;
for (int i = 0; i < rowCount; i++)
{
   for (int j = 0; j < RowsToAdd; j++)
   {
     DataRow dr = AlldaysList.NewRow();
     dr["scenarionid"] = DBNull.Value;
     dr["description"] = "";

     AlldaysList.Rows.Add(dr);
   }
}
于 2014-10-01T07:50:34.557 に答える