我的DataGridView的CellValueChanged事件中的RowIndex为-1

时间:2018-10-11 06:23:50

标签: vb.net datagridview datasource

在显示到DataGridView中之前,我需要更改一些数据,并且正在使用CellValueChanged事件。问题在于,当datagridview填充数据源时,e.RowIndex为-1。

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 :(得分:0)

那是正常的。我认为这是设置列标题的时间。您只需向事件处理程序添加If语句即可将其过滤掉。

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

答案 1 :(得分:0)

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

对我来说很好。

您如何更改值? 还要发布更改它的部分代码。作为更改的来源,索引不是结果(您发布的代码)。