Dim i As Integer
        Dim database1 As DataTable
        Dim str As String
        str = ""
        For i = GridView1.Rows.Count - 1 To 0 Step -1
            Dim cb As CheckBox
            cb = GridView1.Rows(i).Cells(0).FindControl("del")
            If cb.Checked = True Then
                database1 = returntable("delete from Sys_works where tId='  " & GridView1.DataKeys(i).Value.ToString() & " ' ")
            End If
        Next
我这个代码可以实现删除选中的一条记录,然后会报错
我知道是因为数据表发生变动,记录移位了才会报错
但是我想不到办法解决,各位大侠,高手,帮我想想办法啊

解决方案 »

  1.   

    for循环收集需要删除的ID
    然后统一执行sql语句
    delete from Sys_works where tid in (....)//符合条件的id
      

  2.   

    无法找到表 0。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 无法找到表 0。源错误: 
    行 20:         End If
    行 21:         da.Fill(ds)
    行 22:         Return ds.Tables(0)
    行 23:     End Function
    行 24:     Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
     
      

  3.   

    什么叫做“记录移位了”?如果是数据库中“记录”“移位了”,那么怎么会改变tId?如果你确信tId改变了,那么跟技术没有关系,纯粹是逻辑设计问题(为什么改变tId?)。如果是记录移除了,那么你可以将SQL加上判断,例如:"if exists(select * from Sys_works where tId='  " & key &" ') delete from Sys_works where tId='  " & key  & " ' " 
    顺便说一下,你确定单引号里边有那些空格吗?如果是多余的空格肯定会经常造成错误的结果。
      

  4.   

     System.IndexOutOfRangeException报的错误是 数组下标越界
    da.Fill(ds) 
    Return ds.Tables(0) =》da.Fill(ds) 
    Return IIF(ds.Tables.Count>0,ds.Tables(0),Nothing) 
     
      

  5.   


    delete而已,返回个什么Table?干么不是直接执行语句,而是要获取返回数据表?这程序什么意思?算了,不管了。
      

  6.   

    还有你之前问的帖子-------------------------------------------------------------
    C#是 
    CheckBox cb; 
    cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("del"); 请问VB该怎么写?
    ---------------------------------------------------------------
    答案是错误的,正确应该如下:
    Dim cb As CheckBox =TryCast(GridView1.Rows(i).Cells(0).FindControl("del"), CheckBox)IF cb IsNot Nothing Then
       
    End IF