1

私は にDataGridViewバインドしているBindingSourceを持っDataViewていDataTableます。行が に追加されると、本来のようDataTableに、変更がDataGridView自動的に に表示されるようにします。標準的なもの。

DataTableインスタンスを と同じフォームに配置するとDataGridViewBindingSourceListChangedイベントが発生し、DataGridView更新されます。しかしDataTable、モジュールや別のフォームなど、他の場所に配置すると、フォームを最小化して復元しない限り、ListChangedイベントは発生せず、DataGridView自動的に更新されません。なんで?

アップデート

簡単なテストアプリでこれを行う方法の例を次に示します。

モジュール:

Imports System.ComponentModel

Module modTick
    Private WithEvents tmr As System.Timers.Timer
    Private r As New Random()

    Public dt As DataTable

    Public Sub Init()
        dt = New DataTable("table")
        dt.Columns.Add("Number")
        dt.Rows.Add(New Object() {r.Next})
        dt.Rows.Add(New Object() {r.Next})
        dt.Rows.Add(New Object() {r.Next})
    End Sub

    Public Sub StartTimer()
        tmr = New System.Timers.Timer()
        tmr.AutoReset = True
        tmr.Interval = 500
        tmr.Enabled = True
    End Sub

    Private Sub _tmrPulse_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles tmr.Elapsed
        dt.Rows.Add(New Object() {r.Next})
    End Sub
End Module

フォーム:

Public Class Form1

    Private dv As DataView
    Private WithEvents bs As BindingSource = New BindingSource()
    Private WithEvents tmr As Timer = New Timer()

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        modTick.Init()

        dv = New DataView()
        dv.Table = modTick.dt
        dv.AllowDelete = False
        dv.AllowEdit = False
        dv.AllowNew = False
        dgdisplay.AutoGenerateColumns = True
        bs.DataSource = dv
        dgdisplay.DataSource = bs

        tmr.Interval = 500
        tmr.Enabled = True
        modTick.StartTimer()
    End Sub

    Private Sub tmr_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tmr.Tick
        Label1.Text = bs.Count
    End Sub
End Class

したがって、モジュールのコードをフォームに入れると、のイベントが発生DataGridViewするため、更新されます。そのままでは、起動も更新もされません。しかし、フォームを最小化して元に戻すと、変更が反映されます。は内のアイテムの数を示しており、これは正しいです。BindingSourceListChangedLabelDataTable

4

0 に答える 0