我有一個datagridview有一個包含兩個值的combox列。當一行的combobox值已被更改時,我正在使用更改更新後端數據庫。Datagridview組合框沒有選擇點擊/編輯
核心問題是數據只在您點擊下拉箭頭後纔會發生變化,然後選擇記錄。如果您單擊組合框單元格並選擇該值,它將不會執行任何操作,因爲組合框選定項目爲空。
有什麼讓我感到困惑的是,在Visual Studio中,除了最初的單擊之後它能夠正常工作,而且它的工作正常,但是當應用程序直接運行時,組合框運行緩慢,需要2到4次組合框才能真正檢測價值已經改變。
這是editcontrol處理程序。
Private Sub DataGridView_Changer(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView.EditingControlShowing
Try
Dim Combo As ComboBox = CType(e.Control, ComboBox)
If Not IsNothing(Combo.SelectedItem) Then
RemoveHandler Combo.SelectedIndexChanged, New EventHandler(AddressOf ComboHandler)
AddHandler Combo.SelectedIndexChanged, New EventHandler(AddressOf ComboHandler)
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
這是數據發生變化,並更新數據庫的組合框處理
Private Sub ComboHandler(sender As Object, e As EventArgs)
Try
Dim EmailID As Integer = DataGridView.CurrentRow.Cells("EmailID").Value
Dim Sent As Boolean = DataGridView.CurrentRow.Cells("BeenSent").Value
If Sent = True Then
Exit Sub
End If
Dim EMRec As DBClass.EmailRecordDB = EmailArchive.Where(Function(X) X.EmailID = EmailID).FirstOrDefault
Dim Combo As ComboBox = CType(sender, ComboBox)
If Combo.SelectedItem.ToString = "Failed" Then
EMRec.SentAttempt = 999
EMRec.BeenSent = False
ElseIf Combo.SelectedItem.ToString = "Resend" Then
EMRec.SentAttempt = 0
EMRec.BeenSent = False
End If
EMRec.ResetStatus() 'DB Update
DirtyCell()
Exit Sub
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Sub DirtyCell() 'Handles DataGridView.CurrentCellDirtyStateChanged
If DataGridView.IsCurrentCellDirty Then
Try
DataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit)
ContextualSearch() ' Refresh Grid
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub
UPDATE 24/04/2014
我已經調整了DirtyCell(),除去if語句,所以它提交更改,而不管該單元格是否髒。這似乎有所改善。
Sub DirtyCell() 'Handles DataGridView.CurrentCellDirtyStateChanged
Try
DataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit)
ContextualSearch() ' Refresh Grid
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
UPDATE 25/04/2014
我還有具有ComboBox細胞最初被選擇的問題。它仍然需要3次點擊才能使值更改實際生效並觸發combohandler事件。
我不知道如何解決這個問題。
謝謝,我實際上只是嘗試使用CellValueChanged事件來執行值更新,並將處理程序恢復到DirtyCell。它似乎更可靠。 – DavidFletcher
我期待我的答案被選中,但我很高興你通過。我希望你分享這些代碼。我最近做了一個項目,在列表框中使用組合框,因爲它按我想要的方式工作,對組合框更改操作!該單元比組合本身晚更新。 _regards – Ranhot
我在等我的老闆確認它能夠滿足他的要求,然後我會把它貼出來。 – DavidFletcher