我有 8 行,但是当 (i = 7) 它说 (i + 1) 超出范围?
I have 8 rows but when (i = 7) it says (i + 1) is out of range?
我有一个 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
我有一个 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