UltraWinGrid удаляет верхнюю запись, а не выбранную

У меня есть ультракрыло, на котором я могу выбрать строки, и мне нужно иметь возможность удалить выделенную строку. На данный момент он вызывает SQL-запрос к базе данных, который я написал, но вместо удаления записи в выбранной строке он удаляет запись в верхней строке. Кто-нибудь может понять, почему?

    Private Sub btnDeleteIncident_Click(sender As Object, e As EventArgs) Handles btnDeleteIncident.Click

    Try
        Dim rowValue = ugHistory.Selected.Rows

        Dim rowToDelete = ugHistory.Rows(0).Cells(0).Value.ToString

        Dim removeIncident As MsgBoxResult
        removeIncident = MsgBox("Are you sure you wish to delete this incident?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Confirm")

        If removeIncident = MsgBoxResult.Yes Then

            Database.deleteIncident(rowToDelete)

            txtClientSave.Text = ""
            rtbProblem.Text = ""
            rtbSolution.Text = ""
            dtpStart.Value = Date.Today
            dtpEnd.Value = Date.Today
            dtpStartTime.Value = DateTime.Now
            dtpEndTime.Value = DateTime.Now
            cboxSolved.Checked = False
            btnUpdate.Hide()
            btnSave.Show()

        ElseIf removeIncident = MsgBoxResult.No Then
            loadIncidents()
        End If

    Catch Ex As Exception
        MsgBox("No incidents to delete")
    End Try

    loadIncidents()

End Sub

SQL-запрос к базе данных;

Public Shared Sub deleteIncident(ByVal supportID As Integer)

    Connect()

    Dim Dc As New OleDbCommand
    Dc.Connection = Con

    Dc.CommandText = "DELETE * FROM tblIncidents WHERE([supportID] = " & supportID & ")"

    Dc.ExecuteNonQuery()
    Disconnect()

End Sub

1 ответ

Решение

Вы берете значение для rowToDelete из первой строки сетки, а не из текущей активной строки

Я предлагаю вам изменить эту строку

 Dim rowToDelete = ugHistory.Rows(0).Cells(0).Value.ToString

в

 Dim rowToDelete = ugHistory.ActiveRow.Cells(0).Value.ToString

Кроме того, всегда лучше придерживаться безопасного подхода при обработке ссылочных объектов, таких как "ActiveRow", поэтому перед запуском кода добавьте тест на допустимый ActiveRow.

 if ugHistory.ActiveRow Is Nothing Then 
     Return
 End If
 Dim rowToDelete = ugHistory.ActiveRow.Cells(0).Value.ToString
Другие вопросы по тегам