获取DataGridViewComboboxColumn SelectedValue(VB.Net)

|| 我需要在DataGridView中获取ComboBox的选定值。我有部分工作,但如果更改网格中的另一个ComboBox,则会收到Null引用异常。这是我的代码:
Private Sub dgvSampleList_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles dgvSampleList.EditingControlShowing
    Dim comboBox As ComboBox = CType(e.Control, ComboBox)

    If (comboBox IsNot Nothing) Then
        \'Remove an existing event-handler
        RemoveHandler comboBox.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged)

        \'Add the event handler. 
        AddHandler comboBox.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged)
    End If
End Sub

Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    Dim comboBox As ComboBox = CType(sender, ComboBox)
    \'Display selected value
    MsgBox(\"ProgramID: \" & comboBox.SelectedValue.ToString)
End Sub
第一次更改ComboBox时,此方法工作正常,但是如果另一个ComboBox更改,则生成Null Reference Exception。任何想法为什么会这样?注意:我在MSDN的讨论表上找到了大多数此代码。 谢谢! 彼得     
已邀请:
        最好避免在不需要全局变量时使用它们。 您只需要在尝试访问
comboBox
属性之前测试comboBox是否为空:
Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    Dim comboBox As ComboBox = CType(sender, ComboBox)
    \'Display selected value
    If comboBox IsNot Nothing Then
        MsgBox(\"ProgramID: \" & comboBox.SelectedValue.ToString)
    End If
End Sub
在我看来,当将“ 1”从旧值设置为新值时,新旧组合框都会调用此SelectedIndexChanged事件。我怀疑当调用旧ѭ1时,发件人为null / Nothing,因为其值正在更改。也许。但是无论发生什么,null都是null。在尝试访问其任何属性之前,只需测试它是否不为null。     
        尝试检查
comboBox.SelectedItem.ToString
而不是
comboBox.SelectedValue.ToString
希望能有所帮助。     
        我有同样的问题。通过对代码进行少量更改来分类。 声明一个全局变量
Dim comboBoxCol As New DataGridViewComboBoxColumn
Dim gol As Integer = 0



 Dim comboBox As ComboBox
    Private Sub dgvSampleList_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DGVItems.EditingControlShowing
        comboBox = CType(e.Control, ComboBox)

        If (comboBox IsNot Nothing) Then

            \'Add the event handler.  
            AddHandler comboBox.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged)
            gol = 1
            \'AddHandler comboBox.SelectionChangeCommitted, New EventHandler(AddressOf ComboBox_SelectedIndexChanged)
        End If
    End Sub

    Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
        comboBox = CType(sender, ComboBox)
        If gol = 1 Then
            Dim item As String = comboBox.Text
            MsgBox(item)
            gol = 0
        End If
  End Sub
    

要回复问题请先登录注册