2011-06-15 126 views
2

我创建了一个HashMap,将DataTable中某行的ID字段映射到行本身,以改善某些经常访问的表的查找时间。现在,我不时得到RowNotInTableException:独立于DataTable存储数据行 - RowNotInTableException

此行已从表中删除且没有任何数据。 BeginEdit()将允许在这一行中创建新的数据。

环顾网络后,似乎DataRows不喜欢不被附加到DataTable。即使DataTable保留在内存中(不确定DataRows是否保留对它的引用,但是我肯定仍然在缓存它),是否有可能通过将这些行全部隔离在HashMap中来破坏某些内容?这个错误还有什么其他原因?这篇文章 RowNotInTableException when accessing second time 讨论了类似的问题,但也没有解决方案。

UPDATE

我实际上存储DataRowViews如果有什么差别。

回答

3

DataRow应该总是附加到某个DataTable。即使从DataTable中删除,该行仍然会引用表。

原因是,表的模式放在DataTable中,而不是DataRow(以及数据本身)。

如果你想快速查找没有DataTables,使用一些自己的结构,而不是DataRow。

+0

好的,但是附件是什么意思?我不摧毁原始dataTable,我只是在一个额外的结构中存储对DataRowViews的引用..? (注意更新,我刚刚意识到我正在存储DataRowViews而不是DataRows,这是否有所作为) 另外,自己的结构并不好,因为它是常用数据表的通用缓存结构,并创建了自己的结构每个表结构的结构都不可能是正确的方式吗? – Nicolas78 2011-06-15 09:03:03

+0

你确定,缓存的行没有被删除(DataRow.Delete())? – TcKs 2011-06-15 10:30:15

+0

不,我不删除一行,永远。我只是读了表,将其存储在缓存中,并且再也不用触摸它(写入方式)。这就是为什么我对这个错误感到困惑。 – Nicolas78 2011-06-15 10:56:21