RowIndex в событии CellValueChanged моего DataGridView -1 - PullRequest
0 голосов
/ 11 октября 2018

Мне нужно изменить некоторые данные перед отображением в DataGridView, и я использую событие CellValueChanged.Проблема в том, что e.RowIndex равен -1, когда datagridview заполняется источником данных.

Private Sub dgvList_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgvList.CellValueChanged

    ' Convert date to Persian if the edited cell has date
        If dgvList.Rows(e.RowIndex).Cells.Item(e.ColumnIndex).ValueType.ToString = "" Then
            ' Do something
        End If

End Sub

Я обновляю значения, используя его источник данных.Я изменяю DataTable, и DataGridView обновляется автоматически:

        Dim MyRow = dstList.Tables("list").NewRow

        MyRow.Item("date_reported") = PersianDateTime.Parse(txtDateReport.Text).ToDateTime
        MyRow.Item("description") = txtDescription.Text
        MyRow.Item("duration") = txtDuration.Text
        MyRow.Item("coworkers") = txtCoworkers.Text
        MyRow.Item("progress") = numProgress.Value
        MyRow.Item("problems") = txtProblems.Text
        MyRow.Item("date_created") = Now.Date

        ' Add this row to the dataset
        dstList.Tables("list").Rows.Add(MyRow)

        ' Apply changes to database
        UpdateList()

Ответы [ 2 ]

0 голосов
/ 11 октября 2018
If e.RowIndex > -1 AndAlso e.ColumnIndex > -1 Then
      Debug.Print(dgvList(e.ColumnIndex, e.RowIndex).ValueType.ToString)
      Debug.Print(dgvList(e.ColumnIndex, e.RowIndex).Value.ToString)
End If

У меня отлично работает.

Как вы меняете значения?Также опубликуйте часть кода, которая его меняет.В качестве источника изменений указывается индекс, а не результат (код, который вы разместили).

0 голосов
/ 11 октября 2018

Это нормально.Я думаю, это когда заголовки столбцов установлены.Вам просто нужно добавить оператор If в обработчик событий, чтобы отфильтровать его.

If e.RowIndex <>  -1 Then
    'It's a valid cell.
End If
...