Domanda

Ho un DataGridView con due DataGridViewComboBoxColumns. Voglio utilizzare l'elemento selezionato nella prima colonna per attivare un ripopolamento degli articoli nella seconda colonna, per riga.

Ecco il codice che ho finora. & Quot; addlInfoParentCat " identifica la prima colonna e currentRow.Cells.Item (1) è DataGridViewComboBoxCell che desidero popolare nuovamente. ExtEventAdditionalInfoType è un tipo che ho definito che contiene le coppie stringa / valore.

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

Fondamentalmente quello che vedo è che la rilegatura funziona alla grande la prima volta. Quando seleziono un elemento nella prima colonna, popola gli elementi correttamente nella seconda. Posso aggiungere righe a DataGridView e ripetere il processo.

Il problema si presenta quando provo a cambiare l'elemento della prima colonna dopo che la seconda colonna è già stata associata. Ottengo una serie infinita di finestre di dialogo con le seguenti:

System.ArgumentException: il valore DataGridViewComboBoxCell non è valido.

Qualche idea sul perché questo stia accadendo? Grazie in anticipo!

AGGIORNAMENTO Il suggerimento di CodeByMoonlight sembra funzionare.

Cancella il valore di DataGridViewComboBoxCell prima di rilegare:

....

            subtypeCell.DataSource = Nothing
            subtypeCell.Value = Nothing  'here's the change
            subtypeCell.DataSource = theChildren

....
È stato utile?

Soluzione

Bene, non appena si modifica il valore della prima combo, si invalida l'associazione e l'origine dati utilizzate per popolare la seconda combo, causando tutti gli errori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top