0

在将新行添加到DataTable. 它不会每次都发生,但是在运行应用程序时,我得到空引用异常,而没有找到空对象。

这是代码:

首先清除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 回答