我创建了一个HashMap,将DataTable中某行的ID字段映射到行本身,以改善某些经常访问的表的查找时间。现在,我不时得到RowNotInTableException:独立于DataTable存储数据行 - RowNotInTableException
此行已从表中删除且没有任何数据。 BeginEdit()将允许在这一行中创建新的数据。
环顾网络后,似乎DataRows不喜欢不被附加到DataTable。即使DataTable保留在内存中(不确定DataRows是否保留对它的引用,但是我肯定仍然在缓存它),是否有可能通过将这些行全部隔离在HashMap中来破坏某些内容?这个错误还有什么其他原因?这篇文章 RowNotInTableException when accessing second time 讨论了类似的问题,但也没有解决方案。
UPDATE
我实际上存储DataRowViews如果有什么差别。
好的,但是附件是什么意思?我不摧毁原始dataTable,我只是在一个额外的结构中存储对DataRowViews的引用..? (注意更新,我刚刚意识到我正在存储DataRowViews而不是DataRows,这是否有所作为) 另外,自己的结构并不好,因为它是常用数据表的通用缓存结构,并创建了自己的结构每个表结构的结构都不可能是正确的方式吗? – Nicolas78 2011-06-15 09:03:03
你确定,缓存的行没有被删除(DataRow.Delete())? – TcKs 2011-06-15 10:30:15
不,我不删除一行,永远。我只是读了表,将其存储在缓存中,并且再也不用触摸它(写入方式)。这就是为什么我对这个错误感到困惑。 – Nicolas78 2011-06-15 10:56:21