获取DataGridViewComboboxColumn SelectedValue(VB.Net) [英] Get DataGridViewComboboxColumn SelectedValue (VB.Net)

查看:122
本文介绍了获取DataGridViewComboboxColumn SelectedValue(VB.Net)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在DataGridView中获取ComboBox的选定值。我有部分工作,但是如果更改网格中的另一个ComboBox,则会收到 Null Reference Exception 。这是我的代码:

I need to get the selected value of a ComboBox in a DataGridView. I have it partially working, but I get a Null Reference Exception if I change a another ComboBox in the grid. Here's my code:

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引用异常。任何想法为什么会这样?注意:我在MSDN的讨论表上找到了大部分代码。

This works fine the first time the ComboBox is changed, but generates a Null Reference Exception if another ComboBox is changed. Any ideas why this is happening? Note: I found most this code on MSDN's discussion forms.

谢谢!

Peter

推荐答案

最好避免在不必要时使用全局变量。

It's best to avoid global variables when they are unnecessary.

您只需要在尝试访问 comboBox 的属性之前测试comboBox是否为空:

You just need to test for whether comboBox is nothing before trying to access a property of 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

在我看来,当 comboBox 从旧值设置为新值时,这个SelectedIndexChanged事件会同时被调用新的组合框。我怀疑当调用旧的 comboBox 时,发件人为null / Nothing,因为其值正在更改。也许。但是无论发生什么,null都是null。在尝试访问其任何属性之前,只需测试它是否不为空即可。

It seems to me that when the comboBox is set from an old value to the new value, that this SelectedIndexChanged event gets called for both the old and new comboboxes. I suspect that when it gets called for the old comboBox, the sender is null/Nothing because its value is getting changed. Maybe. But no matter what it is happening, a null is a null. Just test that it's not null before you try to access any of its properties.

这篇关于获取DataGridViewComboboxColumn SelectedValue(VB.Net)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆