You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:45:02