1、必须用VB.NET 2、数据库链接采用OLEDB我的代码如下:Private Sub dgrOrganize_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgrOrganize.ItemCommand        If e.CommandName = "Delete" Then
            cnn = New OleDbConnection(System.Configuration.ConfigurationSettings.GetConfig("ConnectionString"))
            cmm = New OleDbCommand("delete from tOrganize where orid = ?id", cnn)
            Dim parm1 = New OleDbParameter("?id", OleDbType.VarChar)
            parm1.Value = Me.dgrOrganize.DataKeys(e.Item.ItemIndex)
            cmm.Parameters.Add(parm1)
            cnn.Open()
            cmm.ExecuteNonQuery()
            cnn.Close()
            SetBind()
        End If
End Sub错误信息如下:索引超出范围。必须为非负值并小于集合大小。参数名: index 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index源错误: 
行 60:             cmm = New OleDbCommand("delete from tOrganize where orid = ?id", cnn)
行 61:             Dim parm1 = New OleDbParameter("?id", OleDbType.VarChar)
行 62:             parm1.Value = Me.dgrOrganize.DataKeys(e.Item.ItemIndex)
行 63:             cmm.Parameters.Add(parm1)
行 64:             cnn.Open()
 

解决方案 »

  1.   

    把datagrid的DataKeyField设为orid
      

  2.   

    Private Sub dgrOrganize_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgrOrganize.ItemCommand
    if(e.Item.ItemIndex>-1) then
            If e.CommandName = "Delete" Then
                cnn = New OleDbConnection(System.Configuration.ConfigurationSettings.GetConfig("ConnectionString"))
                cmm = New OleDbCommand("delete from tOrganize where orid = @id", cnn)
                Dim parm1 = New OleDbParameter("@id", OleDbType.VarChar)
                parm1.Value = Me.dgrOrganize.DataKeys(e.Item.ItemIndex)
                cmm.Parameters.Add(parm1)
                cnn.Open()
                cmm.ExecuteNonQuery()
                cnn.Close()
                SetBind()
            End If
    end if
    End Sub
      

  3.   

    eqh(步行者) 是正解!感谢 singlepine(小山)  ,不过多个字段的主键怎么处理呢?
      

  4.   

    不过多个字段的主键怎么处理呢?
    -----------
    你可以把多个主键合并起来,生成一个独立的主键
    比如
    select id1 & '|' & id2 as id,xx,xx from table
    这样id就是你的主键,返回的时候,选在代码里面将取到的主键切割开,然后分别授予SQL的条件即可.