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