2015-10-16 59 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