环境:VB.net;Access;WinForm 
在DataGrid中任意选中一行按Delete键删除后,点BtnSave按钮保存出错:不能通过已删除的行访问该行的信息,在如下代码中注明了出错位置,因为需要对表中第2列进行加密后再保存到数据库,所以用了For each语句,但是在增加,修改记录的时候没有错误出现,请帮忙看看问题如何解决,谢谢!! 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
        DG_Fill() 
    End Sub 
    Private Sub DG_Fill() 
        Dim CMD As New OleDb.OleDbCommand("select BNO ,NM1,NM2,GH from MYTB", MyConnection) 
        MyAdapter.SelectCommand = CMD 
        If MyConnection.State = ConnectionState.Closed Then 
            MyConnection.Open() 
        End If 
        NDataSet.Clear() 
        MyAdapter.Fill(NDataSet, "MYTB") 
        MYDG.DataSource = NDataSet 
        MYDG.DataMember = "MYTB" 
        MYDG.Refresh() 
        MyConnection.Close() 
    End Sub     Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click 
        Dim nr As DataRow 
        For Each nr In NDataSet.Tables("MYTB").Rows 
            nr(1) = EncryptString(nr(1))        'debug到此处出现错误:不能通过已删除的行访问该行的信息 
        Next 
        Dim cb As New OleDb.OleDbCommandBuilder(MyAdapter) 
        MyAdapter.Update(NDataSet, "MYTB") 
        DG_Fill() 
    End Sub

解决方案 »

  1.   

    对.net不熟,你删完数据集和Datagrid都要update或refresh一下,真不行就.datasource=nothing然后再绑一次
      

  2.   

    update和refresh都试过还是一样的问题,如果用for each遍历删除记录后的表好像会去找那条删除后的记录导致错误出现,如果跳过for each 的循环直接更新到数据库不会有错误,但也就跳过了加密的过程.
      

  3.   

    .net的怎么问到VB数据库版来了?我的笔记本配置不怎么高,安装.net环境实在太慢了。
    帮不了你,表示歉意!
    天狼工作室
    http://www.j2soft.cn/
      

  4.   

    把游标改成adOpenDynamic试一下.
      

  5.   

    这样试试:在删除记录后,令记录集 .ReQuery 一次。这样得到的必然是未删除的记录。