我在連接到Access數據庫表的VB.Net 2008中有一個DGV。 DGV不是隻讀的,但除了包含組合框的一列外,其中只有只讀列。組合框允許用戶選擇該特定行的結果,然後該程序根據在組合框中選擇的項目將預先計算的值複製到「利潤」列中。然後用戶點擊保存按鈕並更新數據庫(目前通過XSD中的SQL方法)。EditingControlShowing事件觸發多次
到目前爲止還不夠容易。
這是代碼。
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
我的問題是,它似乎是,如果用戶選擇從ComboBox所期望的結果,但不敲回車,並簡單地將鼠標到一個不同的組合框,再次選擇不同行的結果,第一個事件處理程序不會斷開連接,因此事件會多次觸發。然後,這會導致各種默認MSGBOX錯誤,並提出了問題,當用戶試圖提交到DB /出口程序等等等等
什麼我需要做的所有更改?我是否需要.EndEdit適當的地方強制行以保存更改?我應該在哪裏調用?
謝謝。
嗯.. EditControlShowing代碼來自MSDN。你認爲我可能沒有正確實施它嗎? http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxitingitingcontrol.aspx – user57087 2009-02-24 17:28:41
當您使用AddHandler時,您不會將創建的EventHandler保存在任何地方。做到這一點,並在調用RemoveHandler時使用該引用。 – 2009-02-24 17:37:17
在另一方面:你不應該甚至需要使用新EvenHandler: RemoveHandler combo.SelectedIndexChanged,AddressOf DGUBStake_SelectedIndexChanged 的AddHandler combo.SelectedIndexChanged,AddressOf DGUBStake_SelectedIndexChanged 應該做的。 – 2009-02-24 17:46:58