vb.net перепривязать сетку данных для отображения изменений в vb.net - PullRequest
3 голосов
/ 19 января 2012

У меня есть следующий код, который обновляет сетку данных в форме после обновления базы данных. У меня вопрос, почему я должен очистить источник данных, а затем повторно добавить его, чтобы отобразить изменения. Я думаю, что метод обновления сделает это, но я не могу заставить это работать. Существует ли более эффективный способ обновления сетки данных, чем сброс источника данных?

Public Sub addPlan(ByVal planname, ByVal plannumber)
    Dim planinfo As New changeDatabase(planname, plannumber, planAdapter)

    planinfo.addPlan()
    Form1.DataGridView1.EndEdit()

    Form1.DataGridView1.DataSource = ""
    Form1.DataGridView1.DataSource = planAdapter.GetData()
End Sub

Ответы [ 2 ]

5 голосов
/ 19 января 2012

Попробуйте создать явное BindingSource и назначить ему источник данных, а затем установите свойство DataSource DataGridView для экземпляра BindingSource.

Метод ResetBinding объекта BindingSource заставит DataGridView перечитать все элементы в списке и обновить все отображаемые значения.

Dim bindingSource As BindingSource
bindingSource = New BindingSource()
bindingSource.DataSource = planAdapter.GetData()
Form1.DataGridView1.DataSource = bindingSource

bindingSource.ResetBindings(false)

Примечание. Передача false означает, что в исходном источнике данных изменились только значения, значение true означает, что схема данных изменилась.

1 голос
/ 31 августа 2012

Приведенный ниже код показывает, как это работает:

Protected WithEvents myWordClueList As WordClueList
Protected gridBindingSource As BindingSource

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    myWordClueList = New WordClueList()

    myWordClueList.Add(New WordCluePair With {.Word = "Eden", .Clue = "First garden"})
    myWordClueList.Add(New WordCluePair With {.Word = "Fears", .Clue = "Aggregate of negative emotions"})

    ' Instantiate a binding source for the GridView
    gridBindingSource = New BindingSource With {.DataSource = myWordClueList}
    WordClueGrid.DataSource = gridBindingSource

End Sub

Хитрость заключается в использовании объекта Binding Source.

Чтобы обновить GridView при внесении изменений в DataSource, вызовите метод ResetBindings вашего объекта BindingSource.

        myWordClueList.OrderBy(Function(pairRow As WordCluePair) pairRow)
        gridBindingSource.ResetBindings(False)
...