5

このコードで:

OracleDataTable dt = PlatypusSchedData.GetAvailablePlatypi(); 
OracleDataTable outputDt = new OracleDataTable();

int iRows = 12;
while (iRows > 0)
{
    outputDt.Rows.Add(new DataRow()); // line 1
    //var dr = new DataRow();     // line 2a
    //outputDt.Rows.Add(dr);      // line 2b
    iRows -= 1;
}

for (int i = 0; i < dt.Rows.Count; i += 1) {
    DataRow dr = dt.Rows[i];
    int outputColumn = 0;
    if (i % 12 == 0 && i > 0) {
        outputColumn += 1; //2?
    }
    outputDt.Rows[i % 12][outputColumn] = dr[0];
    outputDt.Rows[i % 12][outputColumn + 1] = dr[1];
}
dataGridView1.DataSource = outputDt;

... 1行目(2a行目と2b行目がコメント化されている)または2a行目と2b行目(1行目がコメント化されている)のいずれかを使用すると、このコンパイル時エラーが発生します。

'System.Data.DataRow.DataRow(System.Data.DataRowBuilder)'は、保護レベルが原因でアクセスできません

forループのDataRowが許容されるため、これは私を困惑させます。これらのDataRowをOracleDataTableに追加するにはどうすればよいですか?

4

2 に答える 2

19

のコンストラクターDataRowはとしてマークされているprotected internalため、直接コンストラクターを作成することはできません。

の新しい行を取得するための正しいコードDataTable

DataRow dr = dt.NewRow();
于 2012-08-22T21:52:00.060 に答える
3

なじみはありませんOracleDataTableが、通常のを継承していると思いますDataTable

コンストラクターが保護されDataRowているため、直接作成することはできません。代わりに、またはのようなファクトリメソッドの1つを使用する必要があります。これにより、から決定されるため、新しいスキーマに正しいスキーマが確実に適用されます。DataTable.Rows.AddDataTable.NewRowDataRowDataTable

したがって、これは機能するはずです。

while (iRows > 0)
{
    DataRow dr = outputDt.NewRow();
    // fill the fields of the row ...
    // add it to the DataTable:
    outputDt.Rows.Add(dr);
    iRows -= 1;
}
于 2012-08-22T21:53:03.213 に答える