У меня есть DGV в VB.Net 2008, подключенный к таблице БД доступа. DGV не только для чтения, но полон столбцов только для чтения, кроме одного, который содержит поле со списком. Поле со списком позволяет пользователю выбрать результат для этой конкретной строки, а затем программа копирует предварительно рассчитанное значение в столбец «Прибыль» в зависимости от элемента, выбранного в выпадающем списке. Затем пользователь нажимает кнопку «Сохранить» и обновления БД (в настоящее время с помощью методов SQL в XSD).
Пока достаточно просто.
Вот код.
Private Sub DGUserBets_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DGUserBets.EditingControlShowing
Dim combo As ComboBox = CType(e.Control, ComboBox)
If (combo IsNot Nothing) Then
// Remove an existing event-handler, if present, to avoid
// adding multiple handlers when the editing control is reused.
RemoveHandler combo.SelectedIndexChanged, _
New EventHandler(AddressOf DGUBStake_SelectedIndexChanged)
// Add the event handler.
AddHandler combo.SelectedIndexChanged, _
New EventHandler(AddressOf DGUBStake_SelectedIndexChanged)
End If
End Sub
Private Sub DGUBStake_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim myStatus As ComboBox = CType(sender, ComboBox)
Dim row = DGUserBets.CurrentRow
Select Case myStatus.SelectedIndex
Case 0
row.Cells("DGUBProfit").Value = 0
// pending. no action
Case 1
row.Cells("DGUBProfit").Value = row.Cells("DGUBIfWin").Value
// win
Case 2
// loses
row.Cells("DGUBProfit").Value = row.Cells("DGUBIfLose").Value
Case 3
// void
row.Cells("DGUBProfit").Value = 0
End Select
End Sub
Проблема, с которой я столкнулся, заключается в том, что если пользователь выберет желаемый результат из комбинированного списка, но НЕ нажмет Enter, то просто подключится к другому комбинированному списку, чтобы снова выбрать результат для другой строки, первого обработчика событий. не отключается и, таким образом, события запускаются несколько раз. Затем это вызывает различные ошибки MsgBox по умолчанию и вызывает проблемы, когда пользователь пытается зафиксировать все изменения в программе DB / exit и т. Д. И т. Д.
Что мне нужно сделать? Нужно ли мне .EndEdit где-то уместно, чтобы заставить строку сохранить изменения? И где мне это назвать?
Спасибо.