2012-03-13 6 views
0

デリゲートを介してDataGridViewを更新しようとしています。これは単純なアプリケーションの一部ですが、最初のクエリは生成に4〜5秒かかります。 DataGridViewを構築するためにFillSchemaを使用して、アプリケーションがすぐに起動してからデータを更新するようにします。これは代表者への私の最初の進出であり、すべての批評が歓迎されます。デリゲートを介して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でデータソースを設定するには、コードが必要です。

+0

DataGridはDataSourceテーブルにバインドされています。上記のLoadGridをデリゲートとして呼び出すのでない限り、更新はうまくいきます。私はコールバック関数で再描画する必要があると思ってUpdateを追加しました。 – Jesse

+0

RefreshGridでdgvSignを再バインドすると機能しますか?たとえば:dgvSign.DataSource = Nothing、dgvSign.DataSource = [data] –

+0

これは完全に機能しました!多くの人がジョシュアに感謝します。 – Jesse

関連する問題