Pergunta

Eu tenho um DataGridView com dois DataGridViewComboBoxColumns. Eu quero usar o item selecionado na primeira coluna para provocar uma re-população dos itens na segunda coluna, em uma base per-linha.

Aqui está o código que tenho até agora. "addlInfoParentCat" identifica a primeira coluna, e currentRow.Cells.Item (1) é o DataGridViewComboBoxCell que eu quero re-preencher. ExtEventAdditionalInfoType é um tipo I definido que contém os pares de cordas / valor.

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

Basicamente o que eu vejo é que as obras de ligação grande da primeira vez. Quando eu selecionar um item na primeira coluna, ele preenche os itens corretamente na segunda. Posso acrescentar linhas para o DataGridView e repita o processo.

O problema surge quando tento alterar o item de primeira coluna após a segunda coluna já foi ligado. Recebo uma seqüência interminável de caixas de diálogo com o seguinte:

System.ArgumentException: valor DataGridViewComboBoxCell não é válido

.

Qualquer idéia de por que isso está acontecendo? Agradecemos antecipadamente!

Atualizar sugestão aparece de CodeByMoonlight ao trabalho.

Eu limpar o valor do DataGridViewComboBoxCell antes de re-ligação:

....

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

....
Foi útil?

Solução

Bem, parece que assim que remodify o valor do primeiro combinação, você está invalidando a ligação e fonte de dados que você usou para preencher a segunda combinação, fazendo com que todos os erros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top