Enlazar 2 ComboxBox - Visual Foxpro 9.0

Quisiera realizarte una consulta nueva. Tengo 2 combobox: combo1 y combo2. El combo 1 desplegá los valores 1, 2, 3, 4. El combo 2 desplegá los valores: PAPELERÍA, OFICINA, ÚTILES, ELECTRÓNICA. La lógica de esto es que el usuario elija un numero de del combo1 y la descripción del combo2 a la que pertenece. Es decir, así:
1 - papelería
2- Oficina
3- Útiles
4- Electrónica
Me pareció buena idea que el usuario, pudiese escoger ambos valores de una sola vez... Es decir que, al escoger un numero del combo 1, automáticamente "llame" o haga coincidir el combo 2 con su descripción. Ejemplo: Si elije 1 en combo el valor 1, que aparezca AUTOMÁTICAMENTE el valor que corresponde a la descripción en el comb2 "PAPELERIA" y así no tener que estar escogiendo en combo1 y 2... Sino unicamente en el combo1. Yo probé con esto, en el valid del combo1:
LOCAL nValComb1, nValComb2, nValComb3, nValComb4
nValComb1 = 1
nValComb2 = 2
nValComb3 = 3
nValComb4 = 4
IF  THISFORM.Combo1.Value =>1 AND THISFORM.Combo1.Value<= 4
    DO CASE
        CASE THISFORM.Combo1.Value = nValComb1
            THISFORM.Combo2.Value = "PAPELERIA"
        CASE THISFORM.Combo1.Value = nValComb2
            THISFORM.Combo2.Value = "OFICINA"
        CASE THISFORM.Combo1.Value = nValComb3
            THISFORM.Combo2.Value = "UTILES"
        CASE THISFORM.Combo1.Value = nValComb4
            THISFORM.Combo2.Value = "ELECTRONICA"
        ENDCASE
        ELSE
            =MESSAGEBOX ("Clase no registrada en sistema. Por favor ingrese un dato valido.", 0 + 16, "Error - (Clase no Registrada en Sistema)")
            RETURN
Endif
Con esto, cada vez que escojo una opción del combo 1, automáticamente aparece (coincidiendo) la opción correspondiente en el combo2... El "enlace" entre combos funciona 100%! El problema que surge por esto es: Cuando agregue un valor nuevo a la lista de los combos, tendré que ir actualizando el código anterior. Por ejemplo, en este caso, tengo hasta 4 - ELECTRÓNICA. Si agregara un nuevo elemento: 5 - DIDÁCTICOS, en el código tendría que ir modificando las lineas (agregar LOCAL nValcomb5... Y todo lo demás). Como podría entonces, enlazar los combos de manera que, cada vez que agregue nuevo elementos [en los combos] no tenga que estar modificando el código.? ¿Es posible? ¿Me podría recomendar otra forma? Cada combo tiene su propio campo (clases. Numero y clases. Descripción) de tabla y sus propiedades están bien definidas. Gracias de antemano. Espero me comprendas... Te explico todo para poder plantear mejor la situación! (^_^)!

1 respuesta

Respuesta
1
Muy bien tu explicación:
¿No has pensado en crear una tabla para almacenar los códigos y sus descripciones?
Si almacenas estos tado en una tabla puedes agregar o quitar datos cuantas veces necesites sin necesidad de modificar el código. Además puedes vincular la tabla a tus dos combobox y con pequeñas modificaciones tu código funcionaría muy bien.
Ejemplo:
Tabla elementos - campos: Código, descripción.
Debes vincular el combobox 1 a los datos de la tabla elementos.
* Evento interactivechange del combobox 1 *
IF  !empty(THISFORM.Combo1.Value)
     THISFORM.Combo2.Value = alltrim(elementos.descripción)
Endif
Hola experto Carlos! Pues si tengo una tabla especifica (aparte) para almacenar los datos que se desplegan el los combos. Jajaja... pude resolver el problema. Gracias por tu ayuda! Me estaba haciendo un "colocho" con algo tan fácil! Pero bueno... así se aprende. Jaja! :D
Quisiera poder consultarte algo ... muy relacionado con este tema... es un problema que encontré con los combos. Pasa esto: agrego un registro nuevo a la tabla de los combos (a través de un form), es decir, agrego una opción más en la lista desplegable. Ok... todo bien! Al seleccionar en el combobox 1 la opción nueva que recién he agregado, me es imposible "generar" el llamado automático en el combobox 2 la primera vez que lo intento. Te ilustrare: si por ejemplo tengo agregados en la tabla de los combos :
1 - papelería
2- Oficina
3- Útiles
4- Electrónica
Y deseo agregar una nueva opción 5 - ESCOLARES, posteriormente, al seleccionar esta nueva opción en el combo 1 (5), el combo 2 no "llama" o "jala" el dato de la descripción correspondiente (ESCOLARES). Más bien tengo que seleccionar manualmente en ambos combos, de la lista desplegable, 5 y ESCOLARES. Es como si no se actualizara bien el dato recién agregado en los combos. Me es un poco extraño.. porque al desplegar ambos combos, los datos ( 5 - ESCOLARES) ahí están.. los puedo ver, pero no se realiza el "llamado" desde el combo 1. No obstante, esto solo ocurre una vez...! Después de haber seleccionado "manualmente" la nueva opción, como que en ese momento se actualizan los combos y ya después, ¿si puedo poner tranquilamente 5 (en combo 1) y automáticamente aparece ESCOLARES en combo 2. Me comprendes? Como si no refrescara bien en los combos. Intente poner un refresh... pero no funciona. En el manejo de combos no tengo mucha experiencia como en textbox.. por eso recurro a ti! Gracias por todo! Saludos!
Mariela... (^_^)!!!
Se que es un poco raro esto... y un poco difícil de explicar... si no me explico bien, por favor disculpame!
No está bien explicado.
Habría que ver algunas cosas como:
1) ¿Cuándo agregas un valor a la tabla desde tu form tienes abierto el otro formulario que tiene los combobox? Si es así al recuperar el foco este formulario debes agregar un thisform. Refresh, o utiliza la funcioón requery() para el combobox: thisform. Cmbobox10. Requery()
2) Si tienes activado el modo de almacenamiento en Buffer debes asegurarte de ejecutar un tableupdate en la tabla en la que agregaste la opción antes de poder elegirlo en el combobox.
En resumen, para que tus combobox funcionen bien con las opciones, asegúrate de haber guardado
Estimado Carlos... la solución es tal y como la planteas: utilice la función REQUERY() y eso era lo que faltaba! Quite el refresh y sustituí.. y funciono a la perfección! Muchas gracias! Como siempre, eres muy amable! Saludos!
Mariela... (^_^)!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas