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



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

相关内容

  • 没有找到相关文章

最新更新