none
ComboBox enlazado a un campo de una tabla RRS feed

  • Pregunta

  • Hola compañer@s. Tengo este problema:

    Tengo una tabla de clientes que incluye el campo CIUDAD. Por otro lado tengo la tabla CIUDADES que solo tiene un campo; el nombre de la ciudad (es la clave de la tabla)

    Tengo un form para moverme por los registros de los Clientes. Necesito que el campo CIUDAD sea un ComboBox y que este combobox al desplegarse muestre todas las ciudades que están en la tabla ciudades. Por supuesto necesito que el ComboBox muestre la ciudad del cliente, es decir, que se posicione correctamente en la ciudad a la que pertenece el cliente.  A ver si me explico, supongamos que en la tabla de CIUDADES hay metidas: Avila, Badajoz, Barcelona, Madrid.

    El primer cliente de la tabla de clientes es de Barcelona, pues el combo debe mostrar 'Barcelona'. Luego cuando hago click en el combo mostrará las 4 ciudades así puedo cambiar la ciudad del cliente.

    No me sale esto. Agradecería ayuda

    Thanks!


    lunes, 18 de mayo de 2015 17:39

Respuestas

  • Hola:

     El tema es que deberías de tener una mejor estructura de las tablas, por ejemplo:

    //Tabla Ciudades
    Ciudades
    CiudadId
    Nombre
    
    //Clientes
    Clientes
    ClienteId
    CiudadId
    Nombre
    Apellidos
    Direccion
    //resto de campos
    

     De esa manera podras hacer un

    Selected * From Ciudades y establecer el resultado en un combobox, definiendo:

    cmboBox1.DataSource = claseOFuncionQueDevuelvaTodasLasCiudades;
    cmboBox1.DisplayMember = "Nombre";
    cmboBox1.ValueMember = "CiudadId";

     Si tienes tu combobox con estos datos, entonces cuando recuperes clientes usarias una consulta como la siguiente:

    SELECT x.ClienteId, x.CiudadId, y.Nombre  FROM Clientes x
    INNER JOIN Ciudades y ON x.CiudadId = y.CiudadId
    WHERE x.ClienteId = 'ValorEnviadoDesdetuFormulario'

     Esta consulta te devolera el valor del Id de la ciudad, entonces en tu combobox despues de recuperar todos los datos, simplemente harias:

    cmboBox1.SelectedValue = entidadrecuperada.CiudadId
    //De donde entidadRecuperada se supone que es una clase del tipo Cliente la cual tiene una propiedad llamada CiudadId
     Espero que con esto quede un poco mas claro lo que deberias de hacer.



    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 22 de mayo de 2015 2:35

Todas las respuestas

  • Hola:

     Supongo que el cliente esta almacenado en una tabla de tu base de datos y que con el tienes almacenado el ID de la ciudad a que la pertenece, o ¿como es que sabes a que ciudad pertenece el cliente?, si mi suposición es correcta entonces solo sera cuestión que recuperes el Id de la ciudad de tu tabla Cliente y suponiendo también que tu combobox Ciudades esta cargada desde una fuente de datos y que tienes definido valores para la propiedad ValueMember entonces solo sera cuestión de que establezcas el Id de la ciudad como el valor actual del combobox.

     cmboxCiudad.SelectedValue = _cliente.CiudadId;

    Algo así seria.

     Si mi suposición no es correcta, entonces te agradeceré que nos platiques todos esos detalles que supuse mal.


    Saludos desde Monterrey, Nuevo León, México!!!

    lunes, 18 de mayo de 2015 18:56
  • Hola Jose Luis. Gracias por la ayuda. Te cuento... la tabla de clientes y de ciudades están enlazadas. Por ahora la tabla de ciudades solo tiene 1 campo: NombreCiudad que ademas es la clave.

    La tabla clientes tiene un campo: CiudadCLiente que es la ciudad del cliente. 

    Lo que yo quiero es que en el form de manejo de CLIENTES, el campo CiudadCliente aparezca como un comboBOx que cuando lo despliegas muestra TODAS las ciudades de la tabla CIUDADES, pero que se posiciona en la ciudad correcta para el cliente, es decir, la ciudad que el cliente tiene asignada en la tabla CLIENTES.

    Gracias de nuevo

    martes, 19 de mayo de 2015 6:12
  • Hola:

     El tema es que deberías de tener una mejor estructura de las tablas, por ejemplo:

    //Tabla Ciudades
    Ciudades
    CiudadId
    Nombre
    
    //Clientes
    Clientes
    ClienteId
    CiudadId
    Nombre
    Apellidos
    Direccion
    //resto de campos
    

     De esa manera podras hacer un

    Selected * From Ciudades y establecer el resultado en un combobox, definiendo:

    cmboBox1.DataSource = claseOFuncionQueDevuelvaTodasLasCiudades;
    cmboBox1.DisplayMember = "Nombre";
    cmboBox1.ValueMember = "CiudadId";

     Si tienes tu combobox con estos datos, entonces cuando recuperes clientes usarias una consulta como la siguiente:

    SELECT x.ClienteId, x.CiudadId, y.Nombre  FROM Clientes x
    INNER JOIN Ciudades y ON x.CiudadId = y.CiudadId
    WHERE x.ClienteId = 'ValorEnviadoDesdetuFormulario'

     Esta consulta te devolera el valor del Id de la ciudad, entonces en tu combobox despues de recuperar todos los datos, simplemente harias:

    cmboBox1.SelectedValue = entidadrecuperada.CiudadId
    //De donde entidadRecuperada se supone que es una clase del tipo Cliente la cual tiene una propiedad llamada CiudadId
     Espero que con esto quede un poco mas claro lo que deberias de hacer.



    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 22 de mayo de 2015 2:35