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:呵呵,关于数组和索引要记住的所有东西都可能很棘手;)。很好,你现在明白了这个问题!祝你好运很好地说明了行和索引。以前从没想过要这样解释。