2012-01-19 11 views
3

データベースに更新が加えられた後、フォーム内のデータグリッドをリフレッシュする次のコードがあります。私の質問は、なぜデータソースをクリアしてから、それを再度追加して変更を表示する必要があるかということです。私はリフレッシュ方法がこれを行うと思うだろうが、私はそれを働かせるように見えない。データソースをリセットするのではなく、データグリッドをリフレッシュするより効率的な方法はありますか?vb.net rebind datagridでvb.netの変更を表示する

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 

答えて

5

明示BindingSourceを作成してみてください、それにデータソースを割り当て、その後のBindingSourceインスタンスにDataGridViewのDataSourceプロパティを設定します。

BindingSourceオブジェクトのResetBindingメソッドを使用すると、DataGridViewはリスト内のすべてのアイテムを再読み込みし、表示されているすべての値を更新します。

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

bindingSource.ResetBindings(false) 

注:唯一の値は、元のデータソースに変更されている偽の手段を渡すと、真は、データのスキーマが変更されたことを意味します。

1

以下のコードが動作するこれを設定する方法を示しています

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 

トリックは、バインディングソースオブジェクトを使用することです。

DataSourceが変更されたときにGridViewを更新するには、BindingSourceオブジェクトのResetBindingsメソッドを呼び出します。

 myWordClueList.OrderBy(Function(pairRow As WordCluePair) pairRow) 
     gridBindingSource.ResetBindings(False) 
関連する問題