0

に新しい行を追加しているときに、この奇妙な問題が発生していDataTableます。毎回発生するわけではありませんが、アプリケーションの実行中に、null が検出されたオブジェクトがないにもかかわらず、null 参照例外が発生します。

コードは次のとおりです。

まず、DataTable の行と列をクリアします。

dtLibraries.Rows.Clear();
dtLibraries.Columns.Clear();
dtLibraries.Columns.Add("Col1");
dtLibraries.Columns.Add("Col2");
dtLibraries.Columns.Add("Col3");
dtLibraries.Columns.Add("Col4");
dtLibraries.Columns.Add("Col5");
dtLibraries.Columns.Add("Col6");
dtLibraries.Columns.Add("Col7");
dtLibraries.Columns.Add("Col8");
dtLibraries.Columns.Add("Col9");

次に、別の DataTable を読み取り、このテーブルにデータを書き込みます。

for (int s = 0; s <= dttemp.Rows.Count - 1; s++)
{
    dttemp1.Clear();
    dttemp1 = business.GetOutputLibraries("SimObjectOutputRequestSet",
    dttemp.Rows[s].ItemArray[2].ToString(),
    dttemp.Rows[s].ItemArray[1].ToString(), dttemp.Rows[s].ItemArray[0].ToString());

    for (int j = 0; j <= dttemp1.Rows.Count - 1; j++)
    {
        DataRow dr = dtLibraries.NewRow();
        dr["Col1"] = dttemp1.Rows[j].ItemArray[0].ToString();
        dr["Col2"] = dttemp1.Rows[j].ItemArray[1].ToString();
        dr["Col3"] = dttemp1.Rows[j].ItemArray[2].ToString();
        dr["Col4"] = dttemp.Rows[s].ItemArray[0].ToString();
        dr["Col5"] = dttemp.Rows[s].ItemArray[2].ToString();
        dr["Col6"] = dttemp.Rows[s].ItemArray[1].ToString();
        dr["Col7"] = cmbObject.Text.ToString();
        dr["Col8"] = cmbLibraryType.Text;
        dr["Col9"] = cmbLibrarySubType.Text;
        dtLibraries.Rows.Add(dr);  /// Exception occurs on this line
    }
}

スタックトレース:

at System.Data.NameNode.Eval(DataRow row, DataRowVersion version)
   at System.Data.BinaryNode.EvalBinaryOp(Int32 op, ExpressionNode left, ExpressionNode right, DataRow row, DataRowVersion version, Int32[] recordNos)
   at System.Data.BinaryNode.Eval(DataRow row, DataRowVersion version)
   at System.Data.DataExpression.Invoke(DataRow row, DataRowVersion version)
   at System.Data.Index.AcceptRecord(Int32 record, IFilter filter)
   at System.Data.Index.ApplyChangeAction(Int32 record, Int32 action, Int32 changeRecord)
   at System.Data.Index.RecordStateChanged(Int32 record, DataViewRowState oldState, DataViewRowState newState)
   at System.Data.DataTable.RecordStateChanged(Int32 record1, DataViewRowState oldState1, DataViewRowState newState1, Int32 record2, DataViewRowState oldState2, DataViewRowState newState2)
   at System.Data.DataTable.SetNewRecordWorker(DataRow row, Int32 proposedRecord, DataRowAction action, Boolean isInMerge, Boolean suppressEnsurePropertyChanged, Int32 position, Boolean fireEvent, Exception& deferredException)
   at System.Data.DataTable.InsertRow(DataRow row, Int64 proposedID, Int32 pos, Boolean fireEvent)
   at System.Data.DataRowCollection.Add(DataRow row)
4

2 に答える 2

1

それはあなたのスキーマからのものです:

dtLibraries.Columns.Add("Col1");
dtLibraries.Columns.Add("Col2");

大文字の「C」を使用します。その間、小文字の「c」で列を呼び出します。

dr["col1"] = dttemp1.Rows[j].ItemArray[0].ToString();
dr["col2"] = dttemp1.Rows[j].ItemArray[1].ToString();

多分それが問題です

于 2012-11-02T07:44:07.560 に答える
1

@AndreasSabroeJydebjerg が提案したように、フィルターを確認しました。バインディング コントロールで問題が発生していた可能性があります。

それを機能させるために、私はこれのためにすべての作業を行った別のテーブルをロードしました..

提案してくれてありがとう。

于 2012-11-06T10:32:26.087 に答える