jueves, 11 de abril de 2013

Cómo agregar elementos (opciones) a un COMBOBOX - Manual y con cursor

Hola. Saludos a todos. En esta ocasión, presentaré como configurar un objeto COMBOBOX para mostrar una lista (desplegable) de opciones, de forma manual y a través de un cursor o tabla (.dbf).

El objeto ComboBox permite la interaccion de diversas opciones en un mismo momento y espacio dentro de nuestras aplicaciones. Es muy óptimo y versatil para el manejo de datos y permite ahorrar bastante recurso y tiempo.

Manual

Para configurar un combo con datos de forma manual, debemos tener en cuenta algunas cosas. Cuando etablecemos uno o varios datos de forma manual, a traves de la propiedad RowSource del combo, estamos limitando la variacion de opciones únicamente a los datos que registramos en dicha propiedad. Esto es util en casos en donde las opciones del usuario para realizar una transaccion van de un "Si" o "No". Por ejemplo: En una aplicacion de nómina, en las altas de empleado, podemos configurar si un empleado esta activo o no


Para configurar manualmente el combo, vamos a las propiedades de este, en la pestaña DATA, ubicamos la propiedad RowSourceType y la establecemos en 1 - Value. Ubicamos la propiedad RowSource y aqui escribimos las opciones que tendra, disponibles, el combo. Separamos cada opcion con una coma, asi:

Cada opcion debe ir separada únicamente por una coma. Si Agregamos un espacio, éste estara contenido en la opcion.

Ahora... si queremos que el combo no permita escritura, en tiempo de ejecucion, vamos a las propieaddes del combo y en la pestaña LAYOUT ubicamos la propiedad STYLE y escogemos la opcion 2 - DropDownList. Con esto, resolvemos ese problema. Luego, podemos aplicar formato deseado para mejorar la presentacion del objeto. Y listo.


 Con CURSOR (temporal o tabla fisica .dbf)

Cargar un cursor con un cursor temporal o una tabla fisica es muy util cuando el numero de opciones es considerable y dispuesto a cambios. Por ejemplo: cuando diseñamos una aplicacion de nómina, definimos unicamente los parametros de ingreso y registro de unidades administrativas en donde se ubicaran los empleados. Pero es el usuario quien registra dichas unidades, y cuando realice las altas de su personal, necesita conocer esas unidades para ubicar a los trabajadores. Como programadores, no sabemos cuantas unidades tendra el sistema ni cuando se registratrán. Al hacer la apertura de la empresa, el cliente inicia operaciones con 20 empleados distribuidos en 4 unidades administrativas. Primero registra las unidades y luego a los empleados. El el formulario de alta de empleados, tiene un campo disponible para ingresar la ubicacion del trabajador, la cual se escoge a través de un combo que desplega todas las unidades disponibles (4). Pasan 4 meses y la empresa crece. El personal pasa a 50 y las unidades a 8. Entonces, como registra el cliente a sus nuevos empleados y sus ubicaciones (predispuestas a cambios, a como pueden ver) cambiantes en el modulo de altas??? Como hace el sistema para ir registrando unidades por un lado, y por otro (alta de empleados) ir mostrando algunas opciones nuevas en un combobox??? Va asi:


Sigamos la linea del ejemplo de sistema de nomina, para ser mas ilustrativos. Imaginemos que tenemos una tabla fisica llamada unidades_adm en donde registramos las unidades administrativas de la empresa, con los campos: codigounidad, nombreunidad. Esta tabla, "alimentara" el combobox ubicado en el modulo de alta de empleado. Vamos al modulo de altas de empleado, y procedemos asi:

1. Agregamos la tabla unidades_adm al entorno de datos de nuestro form.
2. En las propiedades del combo, ubicamos en la pestaña DATA la propiedad RowSourceType y seleccionamos la opcion 6 - Fields. Con esto, establecemos que el combo sera "alimentado" con los registros de un campo de una tabla. En la propiedad RowSource, seleccionamos el campo especifico con el cual deseamos hacer referencia de opciones en el combo. En este caso, unidades_adm.codigounidad. Seleccionamos la propiedad Style (en Layout) y escogemos 2  - DropDownList

Y listo. Ahora, cada vez que el usuario registre una nueva unidad, en el modulo de altas de empleados, ya las opciones estaran disponibles! :) De esta forma muy sencilla, podemos ver como mantener actualizadas las opcions de un combobox.

Para usar un cursor temporal, lo unico que hacemos es crear el cursor en el init del form y luego cargarlo al combo. EN el init del form, seleccionamos los datos en un cursor

SELECT codigounidad FROM unidades_adm INTO CURSOR temp1

y en las propiedades del combo, colocamos el nombre del cursor y campo

temp1.codigounidad

Y listo! :)

Cualquier duda, consulta o comentario, siempre es bienvenido para mejorar! :D

Saludos!
Desde Managua, Nicaragua! :D :D
Raven ;D ;D ;D


9 comentarios:

  1. Si lo creo en forma manual donde le indico que se guarda los datos, al activar control source y escoger el orgen de lso datos me desactiva el combobox

    ResponderEliminar
  2. Yo tengo una consulta
    Tengo un combobox que estoy cargando desde un cursor, todo va bien, pero necesito crear un registro en la tabla de donde tome los datos al cursor desde el el mismo combobox agregando solamente un boton "Nuevo" al lado del combobox.

    Como podria hacerlo?

    ResponderEliminar
    Respuestas
    1. hola como estas, ya lo resolviste?, sino avisame y te puedo guiar.

      Eliminar
  3. buenas, pero si tengo barios combobox en mi formulario, agrego todas las tablas a relacionar en el init del from, y cuando realizo el proceso en las propiedades de combobox solo se me carga los compo de una sola tabla en el rowsource, me pueden ayudar ?

    ResponderEliminar
  4. Yo tengo una duda.
    Si tengo un cursor con 2 campos, puedo mostrar los dos campos en el combobox (id,nombre).
    Comom puedo hacer que cuando seleccione el dato, en el combo aparezca seleccionado el nombre, pero internamente tenga almanenado el valor del Id? Lo pregunto por que necesito 2 combos, en uno selecciono el id (pero quiero que se muestre el nombre) y en el segundo muestro otros datos relacionados con ese Id

    ResponderEliminar
  5. como le puedo hacer para que al momento de seleccionar una opcion imprima una imagen en un picture

    ResponderEliminar
  6. Y si quiero valores únicos en el despliegue?

    ResponderEliminar