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

person David    schedule 05.07.2016    source источник
comment
Поскольку вы устанавливаете rowToDelete в первую строку сетки, а не в выбранную строку   -  person Steve    schedule 05.07.2016
comment
@ Стив, как мне это изменить? Я пробовал использовать e.Selected.Rows, но это тоже не сработало.   -  person David    schedule 05.07.2016


Ответы (1)


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

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

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

to

 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
person Steve    schedule 05.07.2016
comment
Это сработало, большое спасибо, застрял с этой проблемой уже несколько часов. (Я новичок во всей этой Infragistics, извините!) - person David; 05.07.2016
comment
Я всегда собирался принять это как ответ, мне просто нужно было подождать еще несколько минут. - person David; 05.07.2016