我有一个DataGridView
8 Rows
.在下面的Sub
中,我有一个If
语句,仅在i
小于RowCount
时才做某事,这是故意的,所以当我在最后一行使用(i + 1)
时,它仍然在范围内,但它不是?我不知道为什么。将不胜感激任何帮助。
这是sub
Public Sub Durations(dgv As DataGridView)
For i As Integer = 0 To dgv.RowCount
Dim intTotalMinutesOfRows As Integer
Dim IntHoursForRows As Integer
Dim intMinutesForRows As Integer
If i < dgv.RowCount Then
If dgv.Rows(i).Cells("EmployeeID").Value = dgv.Rows(i + 1).Cells("EmployeeID").Value _
And dgv.Rows(i).Cells("Date").Value = dgv.Rows(i + 1).Cells("Date").Value Then
intTotalMinutesOfRows = intTotalMinutesOfRows + dgv.Rows(i).Cells("TotalDurationOfRow").Value
Else
intTotalMinutesOfRows = intTotalMinutesOfRows + dgv.Rows(i).Cells("TotalDurationOfRow").Value
IntHoursForRows = Math.Floor(intTotalMinutesOfRows / 60)
intMinutesForRows = intTotalMinutesOfRows Mod 60
dgv.Rows(i).Cells("TotalDurationForDay").Value = "" & IntHoursForRows & " Hrs " & intMinutesForRows & " Mins"
intTotalMinutesOfRows = 0
End If
End If
Next
仅迭代到RowCount - 1
:
For i As Integer = 0 To dgv.RowCount - 1
^^^
请注意,尽管您有If i < dgv.RowCount Then
,但稍后在此条件运算符中,您将尝试访问Rows(i + 1)
,这会导致i = dgv.RowCount - 1
异常。因此,您还必须将条件更改为If i < dgv.RowCount - 1 Then
。
索引从零开始(它们从 0 开始(,因此索引 7 是第 8 行。
Row : 1 2 3 4 5 6 7 8
Index : 0 1 2 3 4 5 6 7
事实上,甚至你的循环的结束也是错误的,因为i
会去任何RowCount
。因此,如果RowCount
是 8,那么i
最终也会是 8(这不起作用,如上面的索引所示(。
最后一个索引,您必须循环到RowCount - 1
:
For i As Integer = 0 To dgv.RowCount - 1