Vb.net 我有8行,但当(I=7)表示(I+;1)超出范围时?

Vb.net 我有8行,但当(I=7)表示(I+;1)超出范围时?,vb.net,datagridview,rowcount,outofrangeexception,Vb.net,Datagridview,Rowcount,Outofrangeexception,我有一个DataGridView和8行。在下面的Sub中,我有一个If语句,仅当i小于行数时才执行某项操作,这是故意的,因此当我在最后一行上使用(i+1)时,它仍在范围内,但不是吗?我不明白为什么。非常感谢您的帮助 这是子代码 Public Sub Durations(dgv As DataGridView) For i As Integer = 0 To dgv.RowCount Dim intTotalMinutesOfRows As Integer

我有一个
DataGridView
8行
。在下面的
Sub
中,我有一个
If
语句,仅当
i
小于
行数时才执行某项操作,这是故意的,因此当我在最后一行上使用
(i+1)
时,它仍在范围内,但不是吗?我不明白为什么。非常感谢您的帮助

这是子代码

    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
公共子时段(dgv作为DataGridView)
对于i,作为整数=0到dgv.RowCount
Dim intTotalMinutesOfRows为整数
Dim IntHoursForRows作为整数
Dim intMinutesForRows为整数
如果我
仅迭代到
行数-1

For i As Integer = 0 To dgv.RowCount - 1
                                     ^^^
请注意,尽管您得到了
如果i
,但稍后在这个条件运算符中,您尝试访问
行(i+1)
,这会导致
i=dgv.RowCount-1的异常。因此,如果i,然后

索引以零为基础(从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(这不起作用,如上面的索引所示)

要循环到最后一个索引,必须循环到
行计数-1

For i As Integer = 0 To dgv.RowCount - 1

0计为一行…因此您需要从0循环到RowCount-1这是我以前的做法,但它给出了相同的错误,尽管我现在将再次执行此操作。您可能需要调整if语句以及类似“dgv.Rows(i+1)”的引用。i+1将在您的上一次迭代中给您带来问题…谢谢你们,他们确实删除了错误,所以加载很好,只是最后一行丢失了它的总持续时间,我以为这是因为最后一行丢失了,但现在我看到它只是没有被处理。DataGridView。您应该在底层非ui数据源上执行所有操作。
RowCount-1
解决了错误,我现在看到最后一行
将使
If
语句失败,这就是为什么没有显示总持续时间。我现在就要这么做。我不明白的是,如果有
8行
,那么为什么第7行的
超出了范围?编辑:坐在这里想这件事,我想硬币终于掉下来了!因为
i
索引
而不是
,所以当
i
为7时,这是最后一个
it@DIMPeteAsUsername:呵呵,关于数组和索引要记住的所有东西都可能很棘手;)。很好,你现在明白了这个问题!祝你好运很好地说明了行和索引。以前从没想过要这样解释。