2011-06-15 54 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