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

  • 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).

     

     

    lunes, 1 de diciembre de 2008 9:44

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.
    miércoles, 4 de noviembre de 2009 18:27
  • 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

    miércoles, 4 de noviembre de 2009 19:35