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:
muchas gracias a todos aquellos que tengan la buena onda de responder.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
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.