Codemunkeee
Codemunkeee

Reputation: 1613

VB.Net Datagridview combobox add a handler

I've spent a day trying to figure out how to solve my problem, which is identical to

this related unanswered question

On the first combobox, my code works fine, no problem. When I try to change the combobox it throws an error Null Reference Exception

This is my code:

Private Sub dgvSurveyQuestions_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles dgvSurveyQuestions.EditingControlShowing
    
    Dim editingComboBox As ComboBox = TryCast(e.Control, ComboBox)
    If Not editingComboBox Is Nothing Then
        'Add the handle to your IndexChanged Event

        RemoveHandler editingComboBox.SelectedIndexChanged, AddressOf editingComboBox_SelectedIndexChanged
        AddHandler editingComboBox.SelectedIndexChanged, AddressOf editingComboBox_SelectedIndexChanged

    End If

    'Prevent this event from firing twice, as is normally the case.
    'RemoveHandler dgvSurveyQuestions.EditingControlShowing, AddressOf dgvSurveyQuestions_EditingControlShowing

End Sub

Private Sub editingComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)

    Dim editingComboBox As ComboBox = TryCast(sender, ComboBox)
    If editingComboBox Is Nothing Then Exit Sub

    'Show your Message Boxes
    MessageBox.Show(editingComboBox.SelectedValue.ToString)  ' throws error here

End Sub

I'm still working on a different workaround, like adding a handler while the datagridview is populated or whatever.. I don't even know if this is possible but I need to do this.
I'm really stuck here, can someone shed some light and advice me on what to do? Thanks

Upvotes: 0

Views: 670

Answers (1)

Ripple
Ripple

Reputation: 1265

Simply check if editingComboBox.SelectedValue is Nothing.

The DataGridView reuses only one ComboBox instance, and internally resets the DataSource of the ComboBox when the user selects another ComboBox cell.
Then the event SelectedIndexChanged raises and SelectedValue will be Nothing at that time.

Upvotes: 2

Related Questions