datatable.Rows.Find не работает - PullRequest
0 голосов
/ 01 марта 2012
        Dim datatable_default_view As DataTable = _datatable.DefaultView.ToTable
        Dim servicenumber As String = datatable_default_view.Rows.Item(e.RowIndex)("Service Number").ToString
'gets the service number of the selected row

        If _datatable.PrimaryKey.Length = 0 Then
            Dim keys(0) As DataColumn
            keys(0) = _datatable.Columns("Service Number")
            _datatable.PrimaryKey = keys
        End If

        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

Я поместил этот код в событие DatagridView_CellEndEdit

Проблема:
Переменная data_row edited не инициализируется при выходе из ячейки в режиме редактирования с помощью клавиатуры (т. Е. Нажатие стрелки вниз / вверх) Если я использую мышь, она работает как положено. Почему это ? Это известная ошибка, которую я использую VB.net 2008. Пожалуйста, помогите

Я загрузил пример проекта с примерами данных здесь . Проверьте это, если это возможно.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Только что попробовал пример решения с 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
0 голосов
/ 01 марта 2012
Dim servicenumber As String =  _datatable.Rows(e.RowIndex)("Service Number").ToString()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...