2012-03-13 53 views
0

我试图通过委托来更新DataGridView。这是一个简单应用程序的一部分,但初始查询需要4-5秒才能生成。我想FillSchema构建DataGridView,以便应用程序快速启动并更新数据。这是我第一次进入代表团,因此所有的批评都受到欢迎。通过委托加载DataGridView

Private Sub LoadGrid(ByVal loadType As String) 
    StringBuild() 

    If loadType = "Schema" Then 
     da.FillSchema(ds, SchemaType.Source, "Requests") 
    Else 
     da.Fill(ds, "Requests") 
    End If 
End Sub 

Private Sub LoadGridAsync() 
    Dim del As New delLoadGrid(AddressOf LoadGrid) 
    Dim cb As New AsyncCallback(AddressOf LoadGridCallback) 
    Dim result As IAsyncResult 
    result = del.BeginInvoke("Full", cb, del) 
End Sub 

Private Sub LoadGridCallback(ByVal result As IAsyncResult) 

    Dim delS As delLoadGrid 
    Dim delR As New delRefreshGrid(AddressOf RefreshGrid) 
    delS = CType(result.AsyncState, delLoadGrid) 
    delS.EndInvoke(result) 

    Invoke(delR) 
End Sub 

Private Sub RefreshGrid() 
    dgvSign.Update() 
End Sub 

我可以在RefreshGrid子版中debug.print,它肯定会触发。任何想法为什么不更新?

回答

1

我自己并没有多使用DataGrid,但我认为Update方法与获取数据到控件没有任何关系,只是它如何重绘。所以一旦你将数据加载到后台线程中,你仍然需要实现一些逻辑来将其放入网格中。你需要一些代码来设置RefreshGrid中的DataSource。

+0

datagrid绑定到一个DataSource表。更新很好,除非我使用上面的代码调用LoadGrid。我添加了更新来确定我需要在回调函数中重绘。 – Jesse 2012-03-13 19:42:43

+0

如果您重新绑定RefreshGrid中的dgvSign,它会工作吗?例如:dgvSign.DataSource = Nothing,然后dgvSign.DataSource = [data] – 2012-03-13 20:23:04

+0

完全奏效!非常感谢Joshua。 – Jesse 2012-03-13 20:56:11