2012-08-09 71 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,而不是數據表和然後清除數據表。