索引超出数组界限问题

qsltz 2004-09-13 09:15:42
有一个datagrid绑定到数据集中的表A,另有文本框绑定到A中的字段.用BindingManagerBase管理数据绑定. 只要鼠标在DATAGRID的滚动条上按一下,然后新增记录就出现错误:
未处理的“System.IndexOutOfRangeException”类型的异常出现在 system.windows.forms.dll 中。

其他信息: 索引超出了数组界限。





Private Sub bnadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnadd.Click
Try
bmmaster.EndCurrentEdit()
bmmaster.AddNew()

Catch err As SystemException
MessageBox.Show(err.ToString, "新增记录发生错误", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)

End Try
txuserid.focus

End Sub

Private Sub bncancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bncancel.Click
bmmaster.CancelCurrentEdit()

End Sub

Private Sub bndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bndelete.Click
If bmmaster.Count > 0 Then
If MessageBox.Show("确定删除本记录吗?", "删除确认", _
MessageBoxButtons.YesNo, MessageBoxIcon.Question) = _
DialogResult.Yes Then

bmmaster.RemoveAt(bmmaster.Position)
End If

End If
End Sub


Private Sub bnupdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnupdate.Click
Dim dsmasterchange As DataSet
dsmaster.EnforceConstraints = False
bmmaster.EndCurrentEdit()
If dsmaster.HasChanges(DataRowState.Deleted) Then
Try
uploaddeletedata()
dsmaster.AcceptChanges()

Catch err As SystemException
dsmaster.RejectChanges()
MessageBox.Show(Err.ToString)

End Try
End If

If dsmaster.HasChanges(DataRowState.Added) Then
Try
uploadadddata()
dsmaster.AcceptChanges()

Catch err As System.Data.OleDb.OleDbException
dsmaster.RejectChanges()
MessageBox.Show(err.ToString)
Catch err As System.SystemException
dsmaster.RejectChanges()
MessageBox.Show(err.ToString)


End Try
End If

If dsmaster.HasChanges(DataRowState.Modified) Then
Try
uploadmodifydata()
dsmaster.AcceptChanges()

Catch err As System.SystemException
dsmaster.RejectChanges()
MessageBox.Show(err.ToString)

End Try
End If
dsmaster.EnforceConstraints = True
MessageBox.Show("数据更新完成!", "消息", MessageBoxButtons.OK, _
MessageBoxIcon.Information)

End Sub


Private Sub bnload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnload.Click
dsmaster.EnforceConstraints = False
filldata()
dsmaster.EnforceConstraints = True
MessageBox.Show("数据填入完成!", "消息", MessageBoxButtons.OK, _
MessageBoxIcon.Information)

End Sub
...全文
325 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qsltz 2004-09-14
  • 打赏
  • 举报
回复
为什么
liujiayu10 2004-09-14
  • 打赏
  • 举报
回复
bmmaster.AddNew()

错误在这个过程里面!
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在C#开发中,“索引超出数组界限”是常遇的错误,通常源于访问数组元素时,所用索引超出数组合法范围。数组索引从0开始,一个包含n个元素的数组,其合法索引范围为0到n-1。若访问索引为n或更大元素,或负数索引,系统会抛出System.IndexOutOfRangeException异常。在“学生管理系统”项目里,该问题可能有以下原因:一是循环条件出错,像for或foreach循环终止条件设置过大,导致遍历数组或集合时越界。二是动态索引计算有误,运行时计算索引时,因逻辑错误使索引超出范围。三是数组未初始化,使用前未分配足够空间,尝试访问时会出错。四是存在null引用,若数组对象本身是null,访问时会抛异常,需确保使用前已正确实例化。五是多线程环境下,不同线程同时修改数组索引,可能使某线程在错误状态下访问数组,触发异常。六是下标硬编码错误,如数组长度9,却误写成10。解决方法有:一是审查代码,重点检查数组访问相关代码,尤其是循环和条件语句。二是借助Visual Studio等IDE调试工具,设断点观察变量值,定位异常行。三是添加异常处理代码,如try-catch块,捕获处理异常,获取详细错误信息。四是记录异常上下文信息,便于定位问题。五是编写单元测试,验证数组操作正确性,确保各种情况下都不越界。初学者要重视这些常见错误,理解并避免它们。在“学生管理系统”中,处理学生数据数组或列表时,要确保索引合法,增加、删除或查找学生信息时逻辑正确。若有代码,针对性分析更易找到问题

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧