【问题标题】:vb.net buttonless delete in gridview在gridview中的vb.net无按钮删除
【发布时间】:2013-11-12 14:36:48
【问题描述】:

我试图通过 datagridview 删除我的数据库中的一条记录,只需按 delete 键,但它给我错误“索引超出范围。必须是非负数且小于集合的大小。”。这是我的代码

Private Sub DataGridView1_UserDeletedRow(sender As Object, e As DataGridViewRowEventArgs) Handles DataGridView1.UserDeletedRow

    For i = 0 To DataGridView1.Rows.Count - 1

        Dim deleterows As Integer = DataGridView1.SelectedRows(i).Cells(0).Value
        Dim sqlquery As String = "delete from tblname where ID = " & deleterows & ";"
        Dim sqlcommand As New OleDbCommand

        With sqlcommand
            .CommandText = sqlquery
            .Connection = conn
            .ExecuteNonQuery()
        End With

    Next

End Sub

【问题讨论】:

  • 首先,您正在循环遍历所有行,而不是测试该行是否为选定行。接下来,当您删除一行时,您的 For/Next 循环的基础会发生变化,因此如果它删除任何行,实际行数将小于它开始时导致错误的值。 VB 为DataGridView1.Rows.Count - 1 创建一个临时变量,例如28,当你删除时,不再有那么多循环。

标签: vb.net gridview datagridview


【解决方案1】:

我想知道问题是否出在“DataGridView1.Rows.Count - 1”上 它可能没有执行 -1 计算...

试试(DataGridView1.Rows.Count - 1)

【讨论】:

    【解决方案2】:

    如果您想使用循环删除行,请尝试向后遍历您的行(即从最后一行开始并向后工作,而不是从前面开始并向前工作)。

    对于您所描述的,最好将循环全部放在一起(使用您自己的代码):

     Dim deleterows As Integer = DataGridView1.SelectedRows(i).Cells(0).Value
     Dim sqlquery As String = "delete from tblname where ID = " & deleterows & ";"
     Dim sqlcommand As New OleDbCommand
    
     With sqlcommand
         .CommandText = sqlquery
         .Connection = conn
         .ExecuteNonQuery()
     End With
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 2011-01-28
      • 1970-01-01
      相关资源
      最近更新 更多