2015-10-16 81 views
0

我明白了。 Datagridview cannot be in the process of changing ANYTHING。我不認爲我是,但我偶爾也會得到這個例外。這真是太奇怪了。超過90%以上的時間工作得很好。Datagridview異常:DGV上的'Reentrant Call'清除

我有一個windows窗體上的tabcontrol和多個tabpages有datagrid視圖控件。它們中沒有一個綁定到數據庫。當用戶瀏覽標籤頁時,每個標籤頁的「輸入」和「離開」事件都有代碼。在進入標籤頁時,如果有DGV控制,則有一行代碼清除所有行。

Private Sub Tab3_Plan_Enter(ByVal sender As Object, ByVal e As System.EventArgs) _ 
    Handles Tab3_Plan.Enter 

     dgPlan.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells 
     CircuitItems = LoadCatalogItems(dgPlan, cbVDSvcLocation, iKind.PlanSku) 
     ' More event code 

Private Function LoadCatalogItems(ByRef DGV As DataGridView, _ 
        ByVal cbControl As System.Windows.Forms.ComboBox, _ 
        ByRef ItemKind As Integer) As Integer 
     Dim DescDGName As String 
     Dim OrigInternalDesc As String 
     Dim DisplayDesc As String 

     DGV.Rows.Clear() ' <-- This is where the exception is thrown 
     ' More function code 

Tab3_Plan_Enter事件處理程序中的AutoSizeRowMode是否可以與此有關?如果是這樣,我該如何克服它?重新排序Tab3_Plan_Enter中的兩行代碼是個好主意嗎?

回答

1

當您嘗試使用當前正在使用的單元格進行操作時會引發此異常。

嘗試在DGV.Rows.Clear()之後添加Thread.Sleep(5000)以給它一些時間來清除DataGridView。既然你說它有時只發生,可能是因爲DataGridView有太多的行,需要一段時間才能清除所有內容。由於您之後可能會添加更多行,因此這是可行的方案。

如果有效,您可以降低睡眠秒數,以便只在需要時停止線程。

+0

我想你的意思是在DGV.Rows.Clear之前。我試試看。可能需要一段時間才能知道這是否能解決問題。 – Ebassador