Для цикла с Datagridview1.SelectedRows (). Ячейки (). Значение имеет «Индекс был вне диапазона».[Vb.net] - PullRequest
0 голосов
/ 20 марта 2019

Мои значения в Datagridview

|   warranty  |
---------------
|    0001     |
|    0002     |
|    0003     |
|    0004     |

значения из кода:

Private Sub UpdateGrid()

    Dim str As String = "select Warranty from TBwarranty"

    ds = New DataSet
    da = New OleDbDataAdapter(str, connection)
    da.Fill(ds, "a")

    DataGridView1.DataSource = ds.Tables("a")

End Sub

Пожалуйста, может кто-нибудь действительно сказать мне, что не так с этим кодом, что у меня эта ошибка:

System.ArgumentOutOfRangeException: 'Индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс '

Сначала я кодировал:

 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim c As Integer = DataGridView1.SelectedRows.Count() - 1 

    For i As Integer = 0 To c

        Dim deleteQuery As String = "DELETE from TBwarranty WHERE warranty='" & DataGridView1.SelectedRows(i).Cells(0).Value & "'"

        Try
            T.ExecuteQuery(deleteQuery, connection) 'This my public sub in other class [ command.ExecuteNonQuery() ]
            UpdateGrid()
        Catch ex As System.Data.OleDb.OleDbException
            MsgBox(ex.Message)
            MessageBox.Show("Fail inserted.")
        End Try

    Next

End Sub

Тогда произошла ошибка выше.

Тогда я попробовал кодировать:

    Dim c As Integer = DataGridView1.SelectedRows.Count() - 1 

    For i As Integer = 0 To c

        Dim deleteQuery As String = "DELETE from TBwarranty WHERE warranty='" & DataGridView1.SelectedRows(i).Cells(0).Value & "'"
        Console.WriteLine(deleteQuery)

    Next

В нем нет ошибок, и вывод в консоль является истинным значением.

Я не понимаю, почему это? Что не так? и как мне? Спасибо за помощь.

1 Ответ

0 голосов
/ 20 марта 2019

По совету комментария. Теперь я могу решить ошибку.

Dim c As Integer = DataGridView1.SelectedRows.Count() - 1 

    For i As Integer = 0 To c
        Dim deleteQuery As String = "DELETE from TBwarranty WHERE warranty='" & DataGridView1.SelectedRows(i).Cells(0).Value & "'"

        Console.WriteLine(deleteQuery)

        Try
            T.ExecuteQuery(deleteQuery, connection) 
        Catch ex As System.Data.OleDb.OleDbException
            MsgBox(ex.Message)
            MessageBox.Show("Failed inserted.")
        End Try
    Next

    UpdateGrid()
...