我在 VB.Net 2008 中有一个连接到 Access DB 表的 DGV。DGV 不是只读的,而是充满了只读列,除了一个包含组合框的列。组合框允许用户选择特定行的结果,然后程序根据组合框中选择的项目将预先计算的值复制到“利润”列中。然后用户点击保存按钮和数据库更新(当前通过 XSD 中的 SQL 方法)。
到目前为止很容易。
这是代码。
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 在适当的地方强制该行保存更改?我应该在哪里称呼它?
谢谢你。