【发布时间】:2009-02-24 17:13:14
【问题描述】:
我在 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 在适当的地方强制该行保存更改?我应该在哪里称呼它?
谢谢。
【问题讨论】:
标签: vb.net visual-studio-2008 datagridview event-handling editcontrol