2012-08-09 74 views
0

我已经将DataTable绑定到WPF(.NET 3.5,WPFToolkit.dll)DataGrid。这是一个非常大的客户端 - 服务器应用程序。服务器可以异步地将数据发送到客户端“引擎”;这些数据是以引擎设置的属性形式发送的。在编辑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本身上调用它。在拨打Clear()之前,我已尝试在DataTable上调用RejectChanges()。没有骰子。

有没有人见过这样的事情?

+0

如果将'MyFunkyGrid'的'ItemsSource'或'DataContext'设置为'null',会发生什么? – SeToY 2012-08-09 12:17:55

+0

@SeToY没有数据显示(按预期)。底层数据表正在改变,但没有崩溃发生。这似乎只在ItemSource绑定到DataTable.DefaultView时发生,并且我正在编辑单元格,同时清除dataTable。 – FreeMemory 2012-08-09 12:26:01

+0

如果ItemsSource中的项目数量是37,会发生这种情况吗? – Johnathan 2012-08-09 12:26:32

回答

0

我不确定为什么即使在清除数据表之前调用datagrid.CancelEdit(),也会抛出异常。但两个措施可以清除数据网格可能避免该异常之前,必须采取:

(1)可以设置selectedItem设置为数据网格的空

(2)可以设置的DataGrid的ItemSource为null,而不是数据表和然后清除数据表。