如果DataTable.GetChanges()没有最后的更改,如何保存数据库上的所有更改?

时间:2012-02-16 08:39:35

标签: vb.net winforms datatable

我使用Windows窗体并在表单上有一个DataGridView。这个gridView我填充了DataTable dt。我用OdbcDataAdapter填充dt。为了保存我在事件处理程序gridView_RowLeave上使用adaper.Update(dt)的更改。问题是dt没有gridView的最后更改。例如,如果我在一行中修改某些数据或在我离开该行时添加带有数据的新行,则方法dt.GetChages()返回false,我必须为dt.GetChanges()返回更多的1行。哪里可以问题?这是我的代码:

Private Sub FillGridview()
  Dim adapter As OdbcDataAdapter

  Dim sCommand As New OdbcCommand("Select * from SPEAKERS", con)
  adapter = New OdbcDataAdapter(sCommand)
  adapter.UpdateCommand = UpdateCommand() 'return a query for Update 
  adapter.InsertCommand = InsertCommand() 'return a query for Insert but without ID
  adapter.DeleteCommand = DeleteCommand()

  Try
    adapter.Fill(dt)
  Catch ex As Exception
    MsgBox(ex.Message)
  End Try
  gridView.DataSource = dt
End Sub

Private Sub gridView_RowLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles gridView.RowLeave
gridView.EndEdit()
If dt.GetChanges() IsNot Nothing Then
  Try
    Dim res As Integer = adapter.Update(dt)
  Catch ex As Exception
    MsgBox(ex.Message)
    dt.Clear()
    adapter.Fill(dt)
  End Try
  If Not dt.HasErrors Then
    dt.AcceptChanges()
  End If
  gridView.Refresh()
End If
End Sub

有没有人知道为什么dt没有最后的更改?

提前致谢!

1 个答案:

答案 0 :(得分:1)

尝试使用bindingSource组件来处理数据,而不是将网格直接链接到数据