Как сохранить все изменения в БД, если DataTable.GetChanges () не имеет последних изменений? - PullRequest
1 голос
/ 16 февраля 2012

Я работаю с окнами форм и на форме у меня есть DataGridView. Этот gridView я заполняю с помощью DataTable dt. DT я заполняю с помощью OdbcDataAdapter. Для сохранения изменений я использую adaper.Update (dt) в обработчике событий gridView_RowLeave. Проблема в том, что у dt нет последних изменений gridView. Например, если я изменяю некоторые данные в одной строке или добавляю новую строку с данными, когда я покидаю эту строку, метод dt.GetChages () возвращает false, и я должен оставить больше 1 строки для dt.GetChanges () возвращает true. Где может быть проблема? Вот мой код:

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 Ответ

1 голос
/ 16 февраля 2012

Попробуйте установить компонент bindingSource для обработки данных и не связывать сетку напрямую с данными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...