我这么写单行可以删除,批量删除就出错.....帮忙看看改改...谢谢!!! Protected Sub btnupdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnupdate.Click
        Dim i, j As Integer
        i = 0
        Dim deleteItem(1000) As String
        For j = 0 To GridView1.Rows.Count - 1
            Dim txtcount As TextBox = GridView1.Rows(j).FindControl("txtcount")
            Dim chkbookid As CheckBox = GridView1.Rows(j).FindControl("chkbookid")
            If chkbookid.Checked = True Then
                deleteItem(i) = j
                i = i + 1            End If
            Response.Write("j=" & j & "<br>")
            Response.Write("i=" & i & "<br>")             mytb.Rows(j)(3) = txtcount.Text
            mytb.Rows(j)(4) = mytb.Rows(j)(2) * mytb.Rows(j)(3)
        Next
        'mytb.AcceptChanges()
        For j = 0 To i - 1
            mytb.Rows(deleteItem(j)).Delete()
        Next
        
         Call Total()
        GridView1.DataSource = New DataView(mytb)
        GridView1.DataBind()
    End Sub

解决方案 »

  1.   

    For j = 0 To i - 1
       mytb.Rows(deleteItem(j)).Delete()
    Next这句有点问题吧, 删除了一行,原来的行号就不同了哦。 每删除一条都要重新定位选中的数据。建议写个do循环,找到一条删除一条。
      

  2.   

    我也觉得你这个地方有问题
            For j = 0 To i - 1
                mytb.Rows(deleteItem(j)).Delete()
            Next为什么用数组,推荐你用Dim list1 as new List(of String),可以动态添加。       For j=0 To list1.count-1
                 mytb.Rows(deleteItem(list1(j))).Delete()
           Next
      

  3.   


    Protected Sub btnupdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnupdate.Click
            Dim  j As Integer
            Dim deleteItem As new System.Collections.Generic.List(of String)
            For j = 0 To GridView1.Rows.Count - 1
                Dim txtcount As TextBox = GridView1.Rows(j).FindControl("txtcount")
                Dim chkbookid As CheckBox = GridView1.Rows(j).FindControl("chkbookid")
                If chkbookid.Checked = True Then
                      deleteItem.add(j)
                End If            mytb.Rows(j)(3) = txtcount.Text
                mytb.Rows(j)(4) = mytb.Rows(j)(2) * mytb.Rows(j)(3)
            Next
            'mytb.AcceptChanges()
            For j = 0 To deleteItem.count-1
                mytb.Rows(deleteItem(deleteItem(j))).Delete()
            Next
            
             Call Total()
            GridView1.DataSource = New DataView(mytb)
            GridView1.DataBind()
        End Sub
      

  4.   

    mytb.Rows(deleteItem(deleteItem(j))).Delete()
    mytb.Rows(deleteItem(j)).Delete()
      

  5.   

     to: wxylvmnn 
    --------------------------------
    这样子不能删除了.......
    什么原因啊?
      

  6.   

    要不我把所以代码贴出来,你帮我看看吧,非常感谢了....
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim bookid As String = Request.QueryString("id")
            If Session("bookcart") Is Nothing Then
                newTable()
                Session("bookcart") = mytb
            Else
                mytb = Session("bookcart")
            End If
            If Not Page.IsPostBack Then
                If (Not bookid = "") Then
                    Call AddToTable(bookid)
                End If
                Call Total()
                GridView1.DataSource = New DataView(mytb)
                GridView1.DataBind()
            End If
        End Sub
        Sub Total()
            Dim i As Integer
            Dim booktotal As Integer = 0
            Dim bookcount As Integer = 0
            For i = 0 To mytb.Rows.Count - 1
                booktotal = booktotal + mytb.Rows(i)(4)
                bookcount = bookcount + mytb.Rows(i)(3)
            Next
            lbltatol.Text = " 总金额:" & booktotal
            lblcount.Text = "商品总数量:" & bookcount
        End Sub
        Sub AddToTable(ByVal bookid As String)
            Dim adp As OleDbDataAdapter
            Dim ds As DataSet
            Dim Sql As String
            Sql = "select * from book where bookid=" & bookid
            Dim db As New ConnDB
            Dim conn As OleDbConnection = db.Getcn
            adp = New OleDbDataAdapter(Sql, conn)
            Dim dt As DataTable 
             ds = New DataSet() 
             adp.Fill(ds, "book")
            dt = ds.Tables("book")
            Dim dr As DataRow = mytb.NewRow()
            dr(0) = dt.Rows(0)("bookid") 
             dr(1) = dt.Rows(0)("bookname")
            dr(2) = dt.Rows(0)("price")
            dr(3) = 1
            dr(4) = dr(2) * dr(3)
            mytb.Rows.Add(dr)
        End Sub
        Sub newTable()
            mytb = New DataTable()
            mytb.Columns.Add(New DataColumn("bookid", GetType(String)))
            mytb.Columns.Add(New DataColumn("bookname", GetType(String)))
            mytb.Columns.Add(New DataColumn("bookprice", GetType(System.Int32)))
            mytb.Columns.Add(New DataColumn("bookcount", GetType(System.Int32)))
            mytb.Columns.Add(New DataColumn("booktotal", GetType(System.Int32)))
        End Sub
        Protected Sub btnupdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnupdate.Click
            Dim i, j As Integer
            ' i = 0
            Dim deleteItem As New System.Collections.Generic.List(Of String)        For j = 0 To GridView1.Rows.Count - 1
                Dim txtcount As TextBox = GridView1.Rows(j).FindControl("txtcount")
                Dim chkbookid As CheckBox = GridView1.Rows(j).FindControl("chkbookid")
                If chkbookid.Checked = True Then
                    deleteItem.Add(j)
                End If          
                
                mytb.Rows(j)(3) = txtcount.Text
                mytb.Rows(j)(4) = mytb.Rows(j)(2) * mytb.Rows(j)(3)
            Next
            'mytb.AcceptChanges()
            For j = 0 To deleteItem.Count - 1
                mytb.Rows(deleteItem(j)).Delete()
            Next
           
            Call Total()
            GridView1.DataSource = New DataView(mytb)
            GridView1.DataBind()
        End Sub
      

  7.   

    哥们,其实我也很菜菜,我给你写了一个,你理解一下。我这个实现动态删除table的行了,但是必须得指定row的id前台
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="tableDelete.aspx.vb" Inherits="tableDelete" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>無題のページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
               <asp:Table runat="server" ID="tbl">
               <asp:TableRow  ID ="row1">
                <asp:TableCell>
                1
                </asp:TableCell>
               </asp:TableRow>
               <asp:TableRow ID="row2">
                <asp:TableCell>
                2
                </asp:TableCell>
               </asp:TableRow>
               <asp:TableRow ID="row3">
                <asp:TableCell>
                3
                </asp:TableCell>
               </asp:TableRow>
               <asp:TableRow ID="row4">
                <asp:TableCell>
                4
                </asp:TableCell>
               </asp:TableRow>
               </asp:Table>
        </div>
        </form>
    </body>
    </html>
    后台Imports System.Collections.Generic
    Partial Class tableDelete
        Inherits System.Web.UI.Page    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim s As New List(Of Integer)
            s.Add(2)
            s.Add(3)
            Dim j As Integer
            For j = 0 To s.Count - 1
                tbl.Rows.Remove(CType(tbl.FindControl("row" & s(j)), TableRow))
            Next
        End Sub
    End Class
      

  8.   

    Dim ss  As Integerss = deleteItem.count -1For j = 0 To ss
                mytb.Rows(deleteItem(deleteItem(j))).Delete()
    ss =deleteItem.count -1
            Next
    这样行不?