访问添加到数据集的数据后访问NullReferenceException

时间:2013-12-06 08:24:36

标签: c# exception datatable dataset

所以基本上,我有一个包含几个数据表的数据集,在我的程序中从中删除列。 在某些时候,我想重置我的数据表,以便对列的所有更改都消失。

因为我不能在我的数据集中创建该数据表的新实例,所以我这样做:

this._dsTest = new DsTest();

//Removing/Adding the first datatable
this._dsTest.Tables.Remove(this._dsTest.TestTable);
this._dsTest.Tables.Add(new DsTest.TestTableDataTable());

//Removing/Adding the second datatable
this._dsTest.Tables.Remove(this._dsTest.ReloadTable);
this._dsTest.Tables.Add(new DsTest.ReloadTableDataTable());

但是,如果我尝试访问第二个数据表,我会收到一个NullReferenceException,告诉我第二个dataTable为空。

我不明白的是: 如果我要在我的数据集中添加另一个表,那么第三个表在我尝试访问它时会抛出NullReferenceException,第二个表可以正常工作。

我有什么遗漏可以解释这种行为吗?

更新

这是我用来访问数据表的代码:

this._dsTest.TestTable.AddTestTableRow("Test", 1);
this._dsTest.ReloadTable.AddReloadTableRow(1, "Reload", 1); //This throws the exception

2 个答案:

答案 0 :(得分:0)

对数据集/数据表进行任何更改时,应使用AcceptChanges方法。

例如:

this._dsTest = new DsTest();    
//Removing/Adding the first datatable
this._dsTest.Tables.Remove(this._dsTest.TestTable);
this._dsTest.AcceptChanges();
this._dsTest.Tables.Add(new DsTest.TestTableDataTable());
this._dsTest.AcceptChanges();

答案 1 :(得分:0)

所以,我终于找到了问题的答案。

我在尝试

时收到NullReferenceException的原因
this._dsTest.ReloadTable.AddReloadTableRow(1, "Reload", 1)

是,我添加到数据集的数据表工作得很好,但该数据表的公共属性(this._dsTest.ReloadTable) 没有设置我添加juts的数据表。

所以解决方案就是这样做:

this._dsTest.InitVars();

之后,访问DataTable可以顺利运行。

感谢任何试图帮助我的人。