我有 8 行,但是当 (i = 7) 它说 (i + 1) 超出范围?

I have 8 rows but when (i = 7) it says (i + 1) is out of range?

我有一个 DataGridView8 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