使用sqldataadapter.fill刷新数据 - 没有看到新数据

时间:2014-05-29 16:55:03

标签: .net vb.net winforms datagridview sqldataadapter

我有一个在后台运行的计时器,用于为datagridview对象保持数据更新。我的计时器正在调用sqldatadapter.fill来填充本地范围的数据集。

如果我转到sql server并从我的表中删除一行,我填充数据集的调用并不反映数据库中的这一变化。

如果我在数据库中更新非主键字段的值并且我的计时器运行,则会选择更改并显示在我的datagridview中。

如何设置sqldataadapter以便在其他后端进程添加或删除行时找到它?

这是在form_load

If ds Is Nothing Then
        ds = New DataSet()
    End If
    Try
        sqldataadapter = New SqlClient.SqlDataAdapter(SELECTQUERY, parentconnectionstring)
        sqldataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
        sqlcommandbuilder = New SqlClient.SqlCommandBuilder(sqldataadapter)
        sqldataadapter.Fill(ds)
        mydata = ds.Tables(0).DefaultView
    Catch ex As Exception
        ExceptionHandler(ex)
    End Try

    If mydata.Table.Rows.Count > 0 Then
        bindingsource.DataSource = mydata
        dgvSystemWeightConfig.DataSource = bindingsource
        UpdateLastUpdateTime()
    End If

这是我的刷新程序

 Public Sub refreshdata()
    disableupdatetimer()
    Try
        If dgvSystemWeightConfig.IsCurrentCellInEditMode Then
            Debug.WriteLine("tried to refresh system weight data but user had a cell in edit mode")
        Else
            Debug.WriteLine("system weight - refreshing data")

            sqldataadapter.Fill(ds, mydata.Table.TableName)
            dgvSystemWeightConfig.Focus()
            UpdateLastUpdateTime()
        End If
    Catch ex As Exception
        ExceptionHandler(ex)
    Finally
        enableUpdateTimer()
    End Try
End Sub

1 个答案:

答案 0 :(得分:0)

不要假设SqlDataAdapter没有正确的记录。显然,DataTable实现了INotifyPropertyChanged,但没有实现INotifyCollectionChanged。绑定到ObservableCollection。

调试并计算ds。
我敢打赌,源代码是正确的,UI控件只是没有接受更改。

要获取插入和删除的UI,您需要有一个实现INotifyCollectionChanged的源。

ObservableCollection实现了INotifyCollectionChanged。

DataTable做了很多你需要更换的东西 需要一个类或结构来保存行,并需要定义列 AutoGenerateColumns仅适用于DataTable。