代码触发‘Index was out of range’报错,求排查问题原因
问题排查与修复
这个错误是典型的索引越界,问题出在这行代码:
id = DataGridView1.SelectedRows(0).Cells("id").Value
可能的触发原因及解决办法:
没有选中任何行:当
DataGridView1里没有选中行时,SelectedRows集合的长度为0,访问索引0就会报错。
修复:先判断是否有选中行,再执行后续逻辑:If DataGridView1.SelectedRows.Count = 0 Then MessageBox.Show("请先选择一行数据") Cursor = Cursors.Default Return End If不存在名为"id"的列:如果
DataGridView1的列集合里没有Name属性为"id"的列(注意是列的Name,不是显示的HeaderText),用Cells("id")查找会返回无效索引,导致报错。
修复:确认列的Name确实是"id",或者改用列的索引(比如Cells(0),根据实际列位置调整),同时可以加判断避免列不存在的情况:Dim idColumn As DataGridViewColumn = DataGridView1.Columns("id") If idColumn Is Nothing Then MessageBox.Show("找不到名为'id'的列") Cursor = Cursors.Default Return End If额外注意:
Cells("id").Value可能为DBNull,直接转Integer会引发类型转换错误,建议加上空值判断:If DBNull.Value.Equals(DataGridView1.SelectedRows(0).Cells("id").Value) Then MessageBox.Show("所选行的id值为空") Cursor = Cursors.Default Return End If
完整修复后的代码
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Cursor = Cursors.AppStarting Dim id As Integer Dim fx As frmItemEntry ' 检查是否有选中行 If DataGridView1.SelectedRows.Count = 0 Then MessageBox.Show("请先选择一行数据") Cursor = Cursors.Default Return End If ' 检查id列是否存在 Dim idColumn As DataGridViewColumn = DataGridView1.Columns("id") If idColumn Is Nothing Then MessageBox.Show("找不到名为'id'的列") Cursor = Cursors.Default Return End If ' 检查id值是否为空 Dim idValue As Object = DataGridView1.SelectedRows(0).Cells("id").Value If DBNull.Value.Equals(idValue) Then MessageBox.Show("所选行的id值为空") Cursor = Cursors.Default Return End If ' 转换为Integer并执行后续逻辑 id = CInt(idValue) fx = New frmItemEntry(id) Button4.PerformClick() fx.ShowDialog() Cursor = Cursors.Default End Sub
内容的提问来源于stack exchange,提问作者Suenan Akbar
相关产品推荐
相关产品推荐

