Erro ao tentar religar DataSource para DataGridViewComboBoxCell?
-
07-07-2019 - |
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
....
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.