Obtenir DataGridViewComboboxColumn SelectedValue (VB.Net)
J'ai besoin d'obtenir la valeur sélectionnée d'une zone de liste déroulante dans un DataGridView. Je l'ai partiellement de travail, mais j'obtiens un Référence Nulle Exception si je change une autre zone de liste déroulante dans la grille. Voici mon 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
Cela fonctionne bien la première fois que la zone de liste déroulante est changé, mais génère une Exception Référence Nulle si une autre zone de liste déroulante est changé. Des idées pourquoi ce qui se passe? Remarque: j'ai trouvé ce code sur le site MSDN de formulaires de discussion.
Merci!
Peter
Vous devez vous connecter pour publier un commentaire.
Il est préférable d'éviter les variables globales lorsqu'ils sont inutiles.
Vous avez juste besoin de test pour savoir si comboBox n'est rien avant d'essayer d'accéder à une propriété de
comboBox
:Il me semble que lorsque l'
comboBox
est définie à partir d'un vieux de la valeur à la nouvelle valeur, que cet événement SelectedIndexChanged est appelée pour à la fois les anciennes et les nouvelles zones de liste modifiables. Je soupçonne que, lorsqu'il est appelé pour la vieillecomboBox
, l'expéditeur est null/Rien parce que sa valeur est à se changer. Peut-être. Mais peu importe ce qu'il se passe, une valeur null est une valeur null. Essai juste que ce n'est pas null avant d'essayer d'accéder à ses propriétés.Essayez de vérifier pour
comboBox.SelectedItem.ToString
au lieu decomboBox.SelectedValue.ToString
Espère que ça aide.
J'ai le même problème. Triés par faire de petits changements dans les codes.
Déclarer une variable globale