在编辑DataGrid时清除DataTable
我已经将DataTable绑定到WPF(.NET 3.5,WPFToolkit.dll)DataGrid。这是一个非常大的客户端 - 服务器应用程序。服务器可以异步地将数据发送到客户端“引擎”;这些数据是以引擎设置的属性形式发送的。在编辑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本身上调用它。在拨打Clear()
之前,我已尝试在DataTable上调用RejectChanges()
。没有骰子。
有没有人见过这样的事情?
我不确定为什么即使在清除数据表之前调用datagrid.CancelEdit(),也会抛出异常。但两个措施可以清除数据网格可能避免该异常之前,必须采取:
(1)可以设置selectedItem设置为数据网格的空
(2)可以设置的DataGrid的ItemSource为null,而不是数据表和然后清除数据表。
如果将'MyFunkyGrid'的'ItemsSource'或'DataContext'设置为'null',会发生什么? – SeToY 2012-08-09 12:17:55
@SeToY没有数据显示(按预期)。底层数据表正在改变,但没有崩溃发生。这似乎只在ItemSource绑定到DataTable.DefaultView时发生,并且我正在编辑单元格,同时清除dataTable。 – FreeMemory 2012-08-09 12:26:01
如果ItemsSource中的项目数量是37,会发生这种情况吗? – Johnathan 2012-08-09 12:26:32