Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
        Try
            Me.Cursor.Current = Cursors.WaitCursor
            If Me.dtIODMST.Rows.Count > 0 Then '如果DataGrid中有数据
                Dim i As Integer
                '寻找选择的行
                Dim DelRows As ArrayList = New ArrayList '用于存储选择的行                For i = 0 To Me.dtIODMST.Rows.Count - 1
                    If Me.grdIODMST.IsSelected(i) Then
                        DelRows.Add(i) '这个i就是选中的行
                    End If
                Next                Dim iDel As Integer = 0
                If DelRows.Count > 0 Then
                    For Each i In DelRows
                        Me.dtIODMST.Rows.RemoveAt(i - iDel)
                        iDel += 1
                    Next
                Else
                    MessageBox.Show("请选中整行后删除", "系统提示")
                End If            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "系统提示")
        Finally
            Me.Cursor.Current = Cursors.Default
        End Try
    End Sub

解决方案 »

  1.   

    老大,该步骤在update以前多次执行有问题吗?我觉得好像不行。另外,我试过,如果用removeat删除会有问题,只能用delete()我没有试大虾的代码,不过我觉得从算法上讲,当该代码在update以前再次执行的时候会有问题。也许是因为vb的我看不太明白。
      

  2.   

    ps:打下能给我解释一下这个循环吗?
    Dim iDel As Integer = 0
       If DelRows.Count > 0 Then
          For Each i In DelRows
                 Me.dtIODMST.Rows.RemoveAt(i - iDel)
                  iDel += 1
          Next
        Else
        MessageBox.Show("请选中整行后删除", "系统提示")
        End If尤其是这一句:Me.dtIODMST.Rows.RemoveAt(i - iDel)
      

  3.   

    我试了一下,这段代码果然有问题。当我执行了一次以后,dataset里面的记录数和记录编号已经和datagrid里面的不一致了,再次执行就会出问题。真想知道按下“del”键的时候及其到底执行的是什么代码。
      

  4.   

    如果是acceptchanges,那样就会把dataset里面的记录彻底删除而不是仅仅打上删除标记,在update的时候,如果dataset里面没有的数据,在数据库里是不会被删除的,只有在dataset里面存在而又被打上删除标记的才可以在update的时候被删除。