Только что попробовал пример решения с VS 2010, и он работает как задумано.DataRow инициализируется правильно, также при переключении строк с помощью клавиш со стрелками.
Редактировать:
Понял, извини.
Похоже, некоторые асинхронные проблемы за кадром.
Возможно, обработка события RowChanged для самого объекта данных может стать для вас обходным решением
Imports System.Data.OleDb
Public Class Form1
Private _datatable As DataTable
Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Members Database.mdb;Persist Security Info=False"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim connection As New OleDbConnection(conn)
Dim adapter As OleDbDataAdapter
Dim _branchname As String = "A BAUR"
Dim cmd As String = "Select [Service Number] ,[Name], [Gender], [Subscription] from " + _branchname.Insert(0, "[") + "]"
adapter = New OleDbDataAdapter(cmd, conn)
_datatable = New DataTable
adapter.Fill(_datatable)
If _datatable.PrimaryKey.Length = 0 Then
Dim keys(0) As DataColumn
keys(0) = _datatable.Columns("Service Number")
_datatable.PrimaryKey = keys
End If
AddHandler _datatable.RowChanged, AddressOf _datatable_RowChanged
DataGridView1.DataSource = _datatable
End Sub
Private Sub _datatable_RowChanged(sender As Object, e As System.Data.DataRowChangeEventArgs)
Dim servicenumber = e.Row("Service Number")
Dim datarow_edited As DataRow = _datatable.Rows.Find(servicenumber)
Try
MsgBox("Record" + datarow_edited("service number") + " was edited")
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error")
End Try
End Sub
End Class