求助! vb.net的delete问题vb.net的delete问题
Sub DeleteEdit(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
        '删除数据
        Dim index As String
        index = e.Item.ItemIndex
        Dim strSQL As String = "Delete From sqbiao Where " & DataGrid1.DataKeyField & _
   "=" & DataGrid1.DataKeys(e.Item.ItemIndex)        executesql(strSQL)
        DataGrid1.EditItemIndex = -1
        BindGrid()
        Response.Write("<script>alert('" + index + "')</script>")    End Sub为什么会出错了,
异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index应该怎么改啊,大家帮我一下啊,谢谢了

解决方案 »

  1.   

    e.Item.ItemIndex返回的值肯定是-1,也就是没有找到e.item对象,你在检查一下,看看调用这个过程的时候表格中有无有效的item行对象
      

  2.   

    Private Sub DataGrid1_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemCreated
            Select Case e.Item.ItemType
                Case ListItemType.Item, ListItemType.AlternatingItem, ListItemType.EditItem
                    Dim myDeleteButton As ImageButton
                    myDeleteButton = e.Item.FindControl("ImageButton1")
                    myDeleteButton.Attributes.Add("onclick", "return confirm('您确定要把该书从收藏夹中删除吗?');")
            End Select    End Sub
     Private Sub DataGrid1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand
            Select Case e.CommandName            Case "del"                Dim conn As New OleDbConnection("Data Source=""" & Me.Server.MapPath(System.Configuration.ConfigurationSettings.AppSettings("database")) & """;Provider=""Microsoft.Jet.OLEDB.4.0"";User ID=Admin")
                    '得到用户ID
                    Dim userid As Integer
                    Dim myCommand As New OleDbDataAdapter("SELECT UserId, UserName FROM T_UserInfo WHERE (UserName = '" & Me.Session("username") & "')", conn)
                    Dim ds As New DataSet
                    myCommand.Fill(ds, "T_UserInfo")
                    userid = CInt(ds.Tables(0).DefaultView.Item(0).Item(0))
                    Dim a As Integer = e.Item.Cells(0).Text                conn.Open()
                    Dim favdel As New OleDbCommand("DELETE FROM T_Favorites WHERE (Book_ID = " & a & ") AND (UserID = " & userid & ")", conn)
                    favdel.ExecuteNonQuery()
                    If DataGrid1.CurrentPageIndex < Me.DataGrid1.PageCount And DataGrid1.CurrentPageIndex <> 0 Then
                        DataGrid1.CurrentPageIndex = DataGrid1.CurrentPageIndex - 1
                    End If
                    conn.Close()
                    favbind()
                     End Select
        End Sub仔细看看
      

  3.   

    item行对象怎么写啊,
    还有别的方法吗
    Sub DeleteEdit完全代码应该是怎样写的啊?
      

  4.   

    DataGrid1.EditItemIndex = -1
    这句是不是有问题....那条已经删除了.
      

  5.   

    那应该怎么写啊,dataGrid的delete的完全代码应该怎么写啊,
    现在急用,谢谢大家啊
      

  6.   

    我想可能是你的事件处理过程没有跟事件联系到一起才会发生这个问题的。你要先定义好你的datagrid的item command就是Sub DeleteEdit()才行。注意:item command是datagrid引发的默认事件。如果包含在Datagrid中的button,linkbutton,imagebutton控件被点击,而且这些控件没有设置commandName属性,那么就会引发datagrid的itemCommand事件的。
      

  7.   

    item command应该怎么定义啊,我刚学vb.net的,大家帮帮我啊!!!
      

  8.   

    Private Sub DataGrid1_DeleteCommand(ByVal source As Object, _
    ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
    Handles DataGrid1.DeleteCommand
       Dim index As Integer
       index = e.Item.ItemIndex
          DataGrid1.DataBind()
    End Sub怎样为控件的 DeleteCommand 事件创建一个事件处理程序啊???????