编辑DataGrid时清除DataTable

时间:2012-08-09 12:15:48

标签: c# wpf datagrid datatable

我有一个绑定到WPF(.NET 3.5,WPFToolkit.dll)DataGrid的DataTable。这是一个非常大的客户端 - 服务器应用程序。服务器可以异步发送数据到客户端“引擎”;这些数据以属性的形式发送,这些属性由引擎设置到我的控件上。

所以,作为我的意思的一个例子,我有一个class MyFunkyDataGrid : DataGridMyFunkyDataGrid有一个名为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()。没有骰子。

有没有人见过这样的东西?

1 个答案:

答案 0 :(得分:0)

即使在清除datatable之前调用了datagrid.CancelEdit(),我也不确定为什么会抛出异常。但是在清除datagrid之前可以采取两个更多的预防措施,这可以避免异常:

(1)您可以将selecteditem设置为datagrid的null

(2)您可以将datagrid的ItemSource设置为null而不是datatable,然后清除datatable。