所以基本上,我有一个包含几个数据表的数据集,在我的程序中从中删除列。 在某些时候,我想重置我的数据表,以便对列的所有更改都消失。
因为我不能在我的数据集中创建该数据表的新实例,所以我这样做:
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
答案 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可以顺利运行。
感谢任何试图帮助我的人。