我有一个绑定到WPF(.NET 3.5,WPFToolkit.dll)DataGrid的DataTable。这是一个非常大的客户端 - 服务器应用程序。服务器可以异步发送数据到客户端“引擎”;这些数据以属性的形式发送,这些属性由引擎设置到我的控件上。
所以,作为我的意思的一个例子,我有一个class MyFunkyDataGrid : DataGrid
。 MyFunkyDataGrid
有一个名为MyFunkyData
的DependencyProperty,其类型为Dictionary<string, Object>
。每当在服务器上更改MyFunkyData
时,它就会立即在客户端上同步,并设置为MyFunkyDataGrid
。当MyFunkyData
发生变化时,我会翻阅字典并将数据设置到我的网格的DataTable上。
当然,当发生这种情况时,我首先需要清除其当前数据的DataTable。所以我打电话给dataTable.Clear()
。通常这是一种享受。 但是如果我正在编辑MyFunkyDataGrid中的一个单元格,当dataTable被清除时,我得到:
System.ExecutionEngineException was unhandled
Message=Exception of type 'System.ExecutionEngineException' was thrown.
InnerException:
崩溃了我的应用。我试过在MyFunkyDataGrid上调用CancelEdit()
,我试过在DataRow本身上调用它。我在调用RejectChanges()
之前尝试在DataTable上调用Clear()
。没有骰子。
有没有人见过这样的东西?
答案 0 :(得分:0)
即使在清除datatable之前调用了datagrid.CancelEdit(),我也不确定为什么会抛出异常。但是在清除datagrid之前可以采取两个更多的预防措施,这可以避免异常:
(1)您可以将selecteditem设置为datagrid的null
(2)您可以将datagrid的ItemSource设置为null而不是datatable,然后清除datatable。