0

我在 Windows 窗体上有一个 datagridview。我有一个在运行时创建的绑定源和数据表,我打算用它们来绑定和保持我的 datagridview 更新。

调试时,我看到我的数据表正在填充行。当您打开可视化工具时,我还可以看到我的 bindingsource 的数据源有数据。

我的问题是我的 datagridview 保持空白,并且似乎从未获得我的数据表和绑定源正在获取的任何数据。

代码示例:

 Private bs1 As New BindingSource
 Private TraysToScanDatatable As New DataTable

在我的构造函数中

TraysToScanDatatable.Columns.Add(New DataColumn("time", GetType(DateTime)))
TraysToScanDatatable.Columns.Add(New DataColumn("scanner", GetType(Integer)))
TraysToScanDatatable.Columns.Add(New DataColumn("traynumber", GetType(Integer)))
bs1.DataSource = TraysToScanDatatable
UpdateDataGridView(TraysToReadDataGridView, bs1.DataSource) 'if I do not set my datagridview with a delegate here then I cannot update the binding source in the timer.

更新定时器逻辑

  TraysToScanDatatable.Rows.Add(New Object() {DateTime.Now, 1, lastScanner1TrayReceived})
  Me.bs1.DataSource = TraysToScanDatatable
  me.bs1.MoveLast

和我的 updatedatagridview 例程

 Public Sub UpdateDataGridView(ByVal control As DataGridView, ByVal newdata As DataTable)
    If Not control.InvokeRequired Then
        control.DataSource = newdata
    Else
        Invoke(New Action(Of DataGridView, DataTable)(AddressOf UpdateDataGridView), control, newdata)
    End If
End Sub
4

2 回答 2

2

您必须将BindingSource对象本身分配给datagridView.Datasource 而不是BindingSource.Datasource.

你的这一行:

If Not control.InvokeRequired Then
    control.DataSource = newdata
Else

正在分配bs1.DataSource给网格数据源而不是BindingSource object

尝试这样做:

datagridview.DataSource = bs1
bs1.Datasource = TraysToScanDatatable

如果这可行,请按照以下步骤应用您的逻辑。

于 2013-10-21T20:22:39.407 回答
0

这个问题的解决方案是多部分的。

正如 Carlos Landeras 指出的那样,我必须将 datagridview 的数据源分配给 bindingsource 对象(而不是 bindingsource.datasource)。

除此之外,我不得不打电话:

 bindingsource.ResetBindings(False)
    DataGridView.Refresh()
于 2013-11-12T19:12:49.640 回答