Buenos días señores, recientemente me he vuelto a reconciliar con la programación y me encuentro con el siguiente problema.
Y como casi todo en este mundo requiere de una rápida solución rápida. Expongo:
Tengo un DataGridView conteniendo datos de clientes (id,nombre, codPais, CodProvincia) y dos Combos, uno es de Paises (Código y Nombre) y otro de Provincias(Código y Nombre). Estos Combos deben estar enlazados de tal forma que cuando cambien de país, el combo de provincias debería actualizarce.
El primer combo (Países) se muestra correctamente pero no el de Provincias.
Ya he buscado en internet y no encuentro nada que me ayude; estoy estancado y necesito avanzar, por lo tanto les agradesco enormemente la ayuda.
Dejo el código para una mejor descripción
Código:
Private Sub frm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Agregando y llenando Combo de País
' Configuramos la columna.
Dim dtPais As New DataTable
Dim col As New DataGridViewComboBoxColumn 'declaro columna tel tipo comboBox que voy a agregar al DataGridVIew
col.Name = "PaísC"
col.HeaderText = "País"
dgv.Columns.Add(col)
Dim column As DataGridViewComboBoxColumn = _
DirectCast(dgv.Columns("PaísC"), DataGridViewComboBoxColumn) 'Establesco la referencia para poder trabajar con el combo
dtPais = ObtenerPais() 'se obtene un datatable conteniendo los países
With column
.DataSource = dtPais
.DisplayMember = "Nombre"
.ValueMember = "Código"
.DataPropertyName = "CodPais" 'Nombre de columna del grid que estará enlazada con el combo para señalar el elemento seleccionado. Esta columna se oculta del grid, automaticamente, por q se integra al combo.
End With
'Agregando columna del tipo combox para Provincia
Dim colProvincia As New DataGridViewComboBoxColumn
colProvincia.Name = "ProvinciaC"
colProvincia.HeaderText = "Provincia"
dgv.Columns.Add(colProvincia)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
dgv.DataSource = ObtenerClientes() 'Devuelve un data table conteniendo datos de un cliente
End Sub
Private Sub dgvNotifyPuertos_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvNotifyPuertos.EditingControlShowing
' Ignoramos otros tipos de controles existentes en las celdas
If Not TypeOf e.Control Is DataGridViewComboBoxEditingControl Then Return
' Referenciamos el control TextBox subyacente en la celda actual.
Dim cellComboBox As DataGridViewComboBoxEditingControl = TryCast(e.Control, DataGridViewComboBoxEditingControl)
' Primero eliminamos el controlador para el evento
' SelectedValueChanged, y después lo volvemos a instalar. si no Hacemos esto no podrìa usar el evento "SelectedValueChange" para una celda
RemoveHandler cellComboBox.SelectedValueChanged, AddressOf SelectedValueChanged
AddHandler cellComboBox.SelectedValueChanged, AddressOf SelectedValueChanged
End Sub
Private Sub SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs)
' Referenciamos el control ComboBox
With dgvNotifyPuertos
If .CurrentCell.OwningColumn.Name.ToString = "PaísC" Then
Dim objPuerto As New clsPuerto
Dim celda As DataGridViewComboBoxCell = DirectCast(.CurrentRow.Cells("ProvinciaC"), DataGridViewComboBoxCell)
celda.DataSource = ObtenerProvincia(.CurrentRow.Cells("PaísC").Value, 1)
celda.ValueMember = "Código"
celda.DisplayMember = "Nombre"
celda.Value = .CurrentRow.Cells("ProvinciaC")
End If
End With
End Sub
muchas gracias a todos aquellos que tengan la buena onda de responder.
Saludos
PD: Trabajo con VS .Net 2010 y el ejemplo es una adaptación de mi problema, con la finalidad de no enredar con la lógica del negocio.