我正在创建一个HashMap,将DataTable中一行的ID字段映射到该行本身,以改善一些经常访问的表的查找时间。现在,我不时得到RowNotInTableException:
此行已从表中删除,但没有任何数据。 BeginEdit()将允许在此行中创建新数据。
看了一下网后,似乎DataRows不喜欢没有附加到DataTable上。即使DataTable保留在内存中(不确定DataRows是否保留对它的引用,但我仍然无论如何仍在缓存它),是否有可能通过将这些行全部隔离在HashMap中来破坏某些东西?还有什么其他原因可以解决这个错误?这个帖子 RowNotInTableException when accessing second time 讨论了一个类似的问题,但也没有解决方案。
更新
如果这有任何不同,我实际上存储的是DataRowViews。
答案 0 :(得分:3)
DataRow应始终附加到某些DataTable。即使从DataTable中删除,该行仍然引用该表。
原因是,表的模式放在DataTable中而不是放在DataRow中(以及数据本身)。
如果您想在没有DataTable的情况下快速查找,请使用一些自己的结构而不是DataRow。