2012-03-13 2 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 

Я могу отлаживать отпечаток в Sub RefreshGrid, и он определенно срабатывает. Любые идеи о том, почему он не обновляется?

ответ

1

Я не использовал DataGrid сам, но я думаю, что метод Update не имеет никакого отношения к получению данных в элементе управления, как он его перекраивает. Поэтому, как только вы загрузите данные в фоновый поток, вам все равно придется реализовать некоторую логику, чтобы получить ее в сетке. Вам нужен код для установки DataSource в RefreshGrid.

+0

Datagrid привязан к таблице DataSource. Обновление отлично работает, если я не использую вышеуказанное, чтобы вызвать LoadGrid в качестве делегата. Я добавил обновление, которое мне нужно было перерисовать в функции обратного вызова. – Jesse

+0

Работает ли это, если вы перегрузите dgvSign в RefreshGrid? Например: dgvSign.DataSource = Nothing, а затем dgvSign.DataSource = [данные] –

+0

Это полностью сработало! Большое спасибо Джошуа. – Jesse

Смежные вопросы