如何通过Next/Previous按钮实现DataGridView行连续循环遍历?
问题根因
你现有的btnPrev_Click代码存在两个核心问题:
- 多余的
For Each遍历逻辑无意义,会反复覆盖MyDesiredIndex变量 - 未处理选中行是第一行时索引减1为负数的情况,直接访问行集合触发索引越界异常
修复方案
直接替换btnPrev_Click的代码即可,逻辑和Next按钮完全对齐,实现双向循环遍历:
Private Sub btnPrev_Click(sender As Object, e As EventArgs) Handles btnPrev.Click ' 先判断DataGridView是否有数据,避免空引用报错 If DataGridView1.RowCount = 0 Then Exit Sub Dim currentIndex As Integer ' 兼容没有选中行的场景,默认取第一行索引 If DataGridView1.SelectedRows.Count = 0 Then currentIndex = 0 Else currentIndex = DataGridView1.SelectedRows(0).Index End If Dim MyDesiredIndex As Integer ' 和Next逻辑反向:到第一行就跳最后一行,否则减1 If currentIndex > 0 Then MyDesiredIndex = currentIndex - 1 Else MyDesiredIndex = DataGridView1.RowCount - 1 End If DataGridView1.ClearSelection() DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0) DataGridView1.Rows(MyDesiredIndex).Selected = True End Sub
可选优化
你也可以给btnNext_Click补充同样的空判断逻辑,避免数据源为空时点击按钮触发异常:
Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click If DataGridView1.RowCount = 0 Then Exit Sub Dim currentIndex As Integer If DataGridView1.SelectedRows.Count = 0 Then currentIndex = 0 Else currentIndex = DataGridView1.SelectedRows(0).Index End If Dim MyDesiredIndex As Integer If currentIndex < DataGridView1.RowCount - 1 Then MyDesiredIndex = currentIndex + 1 Else MyDesiredIndex = 0 End If DataGridView1.ClearSelection() DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0) DataGridView1.Rows(MyDesiredIndex).Selected = True End Sub
内容的提问来源于stack exchange,提问作者John Michael Wilkinson
相关产品推荐
相关产品推荐

