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

选中DataGridView行后获取连续3行学生代码至文本框报错求助

解决DataGridView选中行后获取连续3行代码到TextBox的问题

原代码的错误点

  • 行索引获取错误:你用SelectedRows(I)获取的是选中行集合里的行,不是该行在DataGridView中的实际位置索引,无法定位到连续的下两行。
  • 列索引错误:你的列顺序是学生姓名(索引0)、班级(索引1)、代码(索引2),原代码用Cells(1)取的是班级列,不是代码列。
  • 未处理边界情况:当选中最后1行或2行时,I+1或I+2会超出总行数,直接访问会触发索引越界异常。
  • 未处理空值:如果单元格值为DBNull.Value,直接调用ToString()会报错。

修正后的代码

在DataGridView的SelectionChanged事件中添加以下逻辑(确保已绑定该事件):

Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
    ' 先判断是否有有效选中行
    If DataGridView1.CurrentRow Is Nothing Then
        TextBox1.Clear()
        TextBox2.Clear()
        TextBox3.Clear()
        Return
    End If

    Dim currentRowIndex As Integer = DataGridView1.CurrentRow.Index
    Dim totalRowCount As Integer = DataGridView1.Rows.Count

    ' 赋值第一个TextBox:当前选中行的代码
    If currentRowIndex < totalRowCount Then
        Dim codeValue As Object = DataGridView1.Rows(currentRowIndex).Cells(2).Value
        TextBox1.Text = If(codeValue IsNot DBNull.Value, codeValue.ToString(), String.Empty)
    Else
        TextBox1.Clear()
    End If

    ' 赋值第二个TextBox:下一行的代码
    If currentRowIndex + 1 < totalRowCount Then
        Dim codeValue As Object = DataGridView1.Rows(currentRowIndex + 1).Cells(2).Value
        TextBox2.Text = If(codeValue IsNot DBNull.Value, codeValue.ToString(), String.Empty)
    Else
        TextBox2.Clear()
    End If

    ' 赋值第三个TextBox:下下一行的代码
    If currentRowIndex + 2 < totalRowCount Then
        Dim codeValue As Object = DataGridView1.Rows(currentRowIndex + 2).Cells(2).Value
        TextBox3.Text = If(codeValue IsNot DBNull.Value, codeValue.ToString(), String.Empty)
    Else
        TextBox3.Clear()
    End If
End Sub

代码说明

  • 获取正确的行位置:用CurrentRow.Index获取选中行在DataGridView中的实际索引,以此定位连续的行。
  • 修正列索引:用Cells(2)访问代码列(索引从0开始计数)。
  • 边界处理:通过判断currentRowIndex + n < totalRowCount确保不会访问超出范围的行,避免索引越界。
  • 空值处理:用If(codeValue IsNot DBNull.Value, ...)判断单元格值是否为空,防止ToString()报错。
  • 空行判断:先检查CurrentRow是否存在,避免未选中行时触发空引用异常。

内容的提问来源于stack exchange,提问作者Hazem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:55:32