Erreur lors de la tentative de réassociation de DataSource à DataGridViewComboBoxCell?
-
07-07-2019 - |
Question
J'ai un DataGridView avec deux DataGridViewComboBoxColumns. Je souhaite utiliser l'élément sélectionné dans la première colonne pour déclencher une nouvelle population d'éléments dans la deuxième colonne, ligne par ligne.
Voici le code que j'ai jusqu'à présent. "addlInfoParentCat" identifie la première colonne, et currentRow.Cells.Item (1) est le DataGridViewComboBoxCell que je veux re-peupler. ExtEventAdditionalInfoType est un type I défini contenant les paires chaîne / valeur.
Private Sub dgvAdditionalInfo_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvAdditionalInfo.CellValueChanged
Dim currentCell As DataGridViewCell
currentCell = Me.dgvAdditionalInfo.CurrentCell
If Not currentCell Is Nothing Then
If currentCell.OwningColumn.DataPropertyName = "addlInfoParentCat" Then
Dim parentTypeID As Integer = currentCell.Value
Dim currentRow As DataGridViewRow = Me.dgvAdditionalInfo.CurrentRow
Dim subtypeCell As DataGridViewComboBoxCell = currentRow.Cells.Item(1)
Dim theChildren As New List(Of ExtEventAdditionalInfoType)
theChildren = Custom_ExtEventAdditionalInfoType.GetChildrenOfThisParentOrderByTypeName(parentTypeID)
subtypeCell.DataSource = Nothing
subtypeCell.DataSource = theChildren
subtypeCell.DisplayMember = "ExtEventAdditionalInfoTypeDescr"
subtypeCell.ValueMember = "ID_ExtEventAdditionalInfoType"
End If
End If
End Sub
En gros, ce que je vois, c’est que la reliure fonctionne très bien la première fois. Lorsque je sélectionne un élément dans la première colonne, les éléments sont correctement renseignés dans la seconde. Je peux ajouter des lignes à DataGridView et répéter le processus.
Le problème survient lorsque j'essaie de modifier l'élément de la première colonne après que la deuxième colonne a déjà été liée. Je reçois une suite infinie de boîtes de dialogue avec les éléments suivants:
System.ArgumentException: la valeur DataGridViewComboBoxCell n'est pas valide.
Avez-vous une idée du pourquoi? Merci d'avance!
MISE À JOUR La suggestion de CodeByMoonlight semble fonctionner.
J'efface la valeur de DataGridViewComboBoxCell avant la nouvelle liaison:
....
subtypeCell.DataSource = Nothing
subtypeCell.Value = Nothing 'here's the change
subtypeCell.DataSource = theChildren
....
La solution
Eh bien, il semble que dès que vous remodifiez la valeur de la première combinaison, vous invalidez la liaison et la source de données que vous avez utilisées pour renseigner la deuxième combinaison, ce qui entraîne toutes les erreurs.