首页 > 解决方案 > 当我循环 DataTable 中的所有行时出现 IndexOutOfRangeException

问题描述

            Dim CurrentRow As DataRow
            Dim NextRow As DataRow

            For i = 0 To dt.Rows.Count - 1
                'checks if taskid matches row id. if so then enter condition
                If dt.Rows(i)("TaskID") = RowID Then
                    'needs to check if next row exist. if it does then get the next row . if not (hence its the final row get it)
                    If dt.Rows(i + 1) Is Nothing Then
                        CurrentRow = dt.Rows(i)
                    Else
                        NextRow = dt.Rows(i + 1)
                    End If


                    Exit For
                End If
            Next

我从字面上刷了互联网,但找不到有效的解决方案。我正在遍历这个数据表并检索下一行。但无论我做什么,总是会出现 dt.rows(i+1) 将不再继续进行的地方,因为它在该位置找不到任何行。我不明白的一件事是,如果 dt.rows(i+1) 像错误提示的那样返回空或不存在,那么你可以做一个简单的 if 条件来检查它是否没有。但我在这里得到这个输入图像描述

标签: vb.net

解决方案


想清楚。这段代码有什么作用:

For i = 0 To dt.Rows.Count - 1

它从第一行的索引循环到最后一行的索引。如果您在循环中的意图是将当前索引处的行与下一个索引处的行进行比较,那么循环到最后一行怎么可能有意义?最后一行之后没有行,那么为什么要循环到最后一行?您需要循环到后面有一行的最后一行。很明显,这是倒数第二行。修复你的坏循环:

For i = 0 To dt.Rows.Count - 2

推荐阅读