在显示到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()
答案 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
对我来说很好。
您如何更改值? 还要发布更改它的部分代码。作为更改的来源,索引不是结果(您发布的代码)。