Usuario
DataGridView con dos combos: ¿LLenar una en función del valor de la otra? (Microsoft Visual Basic 2008)

Pregunta
-
DataGridView con dos combos: ¿LLenar una en función del valor de la otra?
Lenguage: Microsoft Visual Basic 2008
Mi Pregunta:
Tengo un datagridview con dos columnas, en las que se muestran los datos de dos combos, la primera combo se carga con los DEPARTAMENTOS de la empresa, y la seguda con con los EMPLEADOS de ese Departamento.
Me gustaría que la columna Empleado del datagridview (cuyo valor se escoge de la combobox que se muestra en esta columna), se cargase con los empleados del Departamento seleccionado en la columna Departamento (el valor de la columna Departamento se selecciona de la combo asociada a esta columna).
- Cambiado Juan Carlos Ruiz [perfil anterior] viernes, 2 de octubre de 2009 19:21 movido a foro de vb (De:Lenguaje C#)
- Cambiado Enrique M. Montejo lunes, 27 de junio de 2011 14:51 acceso a datos (De:Lenguaje VB.NET)
Todas las respuestas
-
Deberias tener una tabla DEPARTAMENTOS con su "IdDepartamentos"
Y una tabla EMPLEADOS con su IdEmpleado, otra columna que se llamara también IdDepartamentos.
Y deberías tener hecha una relación entre la tabla padre DEPARTAMENTOS(IdDepartamento) y la tabla hija EMPLEADOS(IdDepartamento)
Todo esto dentro de un Dataset.
Además, para poder realizar la selección que propones, en la tabla EMPLEADOS, cada empleado debería tener asignado ya su departamento.
ESTO SE HARÍA EN OTRO FORM>> Selección de departamento a los empleados.Si la tabla donde implementas los comboboxes se llamara LISTAX, el tema sería el siguiente:
PARA COMBOBOXdepartamentos
COMBOBOXdepartamentos.datasource = VistaDepartamentosBindingSource
COMBOBOXdepartamentos.Displaymember = NombreDepartamento
COMBOBOXdepartamentos.Valuemember = IdDepartamento
PARA COMBOBOXempleadosdeldepartamentoseleccionado
COMBOBOXempleadosdptoseleccionado.datasource = VistaEmpleadosDptoSeleccionadoBindingSource
COMBOBOXempleadosdptoseleccionado.Displaymember = NombreDepartamento
COMBOBOXempleadosdptoseleccionado.Valuemember = IdDepartamento
PARA VistaDepartamentosBindingSource
VistaDepartamentosBindingSource.Datasource = MIDATASET
VistaDepartamentosBindingSource.Datamember = Departamentos
PARA VistaEmpleadosDptoSeleccionadoBindingSource
VistaEmpleadosDptoSeleccionadoBindingSource.Datasource = VistaDepartamentosBindingSource
VistaEmpleadosDptoSeleccionadoBindingSource.Datamember = NOMBRE DE LA RELACIÓN QUE HAYAS HECHO ENTRE LAS DOS TABLAS DEPARTAMENTO,EMPLEADOS.
UN SALUDO. UN PROBLEMA SUELE TENER MÁS DE UNA SOLUCIÓN. -
Dim con As New MySqlConnection(My.Settings.MysqlConnectionString) con.Open() Dim dr As MySqlDataReader Dim dr1 As MySqlDataReader Dim micon As New MySqlCommand("SELECT * FROM vidrio where id_vidrio not in (3,4,5,6);", con) Dim micon1 As New MySqlCommand("select desc_metodo from metodo where id_metodo between 8 and 12 order by id_metodo", con) Column6.Items.Clear() Column14.Items.Clear() Try dr = micon.ExecuteReader While dr.Read() If dr.HasRows Then Column6.Items.Add(dr.Item(1)) End If End While dr.Close() dr1 = micon1.ExecuteReader Column14.Items.Add("") While dr1.Read() If dr1.HasRows Then Column14.Items.Add(dr1.Item(0)) End If End While dr1.Close() Catch ex As Exception Finally con.Close() End Try
Lo anterior es para bases de datos mysql
si utilizas otra debes adaptar el datareader.
el codigo anterior te permite realizar el llenado de las colecciones dependiendo de una consulta en especifico
a se me olvidaba esto debe ir en el metodo addrows para poder que cuando la fila se carge tambien se carge la coleccion que neesitas segun la consulta que le hagas a la base de datos.
si quiere hacerlo mas especifico deberias hacerlo directamente en la celda activa segun el dato que te esconjan en el primer combo.
puedes tener la coleccion de la primera lista de manera predeterminada y en el evento indexchage de la celda activa que segun el dato que te seleccionaron te haga la consulta