Uso de combobox con grid

Hola experto, por favor me podrías ayudar:
Tengo un formulario con un combobox y un grid. Necesito mostrar el campo de mi tabla primçncipal en el combo, y los datos de mi segunda tabla en el grid, pero que correspondan a los registros de la tabla principal.
Esto sale cuando del dataenvironment "jalo" los campos al formulario, y debo añadir botones de comando para despalazarme, pero al usar el combobox no resulta el desplazamiento, ya probé poner en las propiedades del Combo el RowSourceType, RowSource y ControlSource, pero no corre tan bien como con los controles de texto y los botones de comando para deplazarse en los registros, ¿en qué estaré fallando, o algo falta?

1 respuesta

1
Respuesta de
¿Hola, cómo estas? Te cuento, yo no uso de esa manera los objetos (arrastrar desde el dataenvironment la tabla), para mi la mejor manera sería:
1) Arrastrar desde la barra de herramientas un grid, luego en la propiedad columncount pones la cantidad de columnas que quieres que tenga la grilla, en este ejemplo puse 4.
2)Arrastras desde la barra de herramientas un combo y en la propiedad rowsourcetype pones la opción 6 (campos) y en la propiedad rowsource escribís nombredetabla.nombredelcampoamostrar, en mi caso puse personas.dni También podes cambiar en la propiedad Style por la opción 2 (lista desplegable).
3) En el procedimiento init del formulario pones este código:
thisform.grid1.recordsourcetype = 4
thisform.grid1.recordsource = ""
thisform.grid1.refresh
En esta parte del código hago que no muestre nada en la grilla cuando se ejecuta el formulario.
4) en el procedimiento click del combo pone este codigo:
select A.fecha, B.nombre, A.detalle, A.precio from compras A inner join personas B on A.dni = B.dni where A.dni = val(thisform.combo1.value) into cursor temporal
thisform.grid1.recordsourcetype = 1
thisform.grid1.recordsource = "temporal"
THISFORM.GRID1.WIDTH = 595
THISFORM.GRID1.LEFT = 10
THISFORM.GRID1.COLUMN1.HEADER1.CAPTION = "FECHA COMPRA"
THISFORM.GRID1.COLUMN1.HEADER1.ALIGNMENT = 2
THISFORM.GRID1.COLUMN2.HEADER1.CAPTION = "CLIENTE"
THISFORM.GRID1.COLUMN2.HEADER1.ALIGNMENT = 2
THISFORM.GRID1.COLUMN3.HEADER1.CAPTION = "DETALLE COMPRA"
THISFORM.GRID1.COLUMN3.HEADER1.ALIGNMENT = 2
THISFORM.GRID1.COLUMN4.HEADER1.CAPTION = "MONTO COMPRA"
THISFORM.GRID1.COLUMN4.HEADER1.ALIGNMENT = 2
THISFORM.GRID1.COLUMN1.WIDTH = 100
THISFORM.GRID1.COLUMN2.WIDTH = 150
THISFORM.GRID1.COLUMN3.WIDTH = 200
THISFORM.GRID1.COLUMN4.WIDTH = 100
THISFORM.GRID1.COLUMN1.ALIGNMENT = 2
THISFORM.GRID1.COLUMN2.ALIGNMENT = 2
THISFORM.GRID1.COLUMN3.ALIGNMENT = 0
THISFORM.GRID1.COLUMN4.ALIGNMENT = 0
thisform.grid1.refresh
En la primera parte de este código armo una consulta sql donde traigo los campos que voy a mostrar en el grid, en este ejemplo son 4 campos, en la consulta filtro los datos de acuerdo al valor activo del combo (en la parte que dice where), a esta consulta la guardo en un cursor que lo llamo temporal.
Luego en la siguiente linea hago que la consulta se llene con un alias y le digo que ese alias se llama "temporal", en las lineas siguientes le doy el ancho que va a tener el grid en tiempo de ejecución, desde que punto de la izquierda con respecto al formulario voy a situar la grilla, luego pongo el nombre que va a tener cada columna, el ancho de cada columna y la alineación que van a tener los datos de cada columna. Por ultimo refresco la grilla.
5) En el procedimiento destroy pone estas lineas:
IF USED("TEMPORAL")
Se le temporal
USE
Endif
Con esto vas a cerrar el cursor que se abrió en el click del combo.
Te cuento que para hacer este ejemplo use 2 tablas, una que se llama personas que tiene el campo dni numérico de 8 y nombre carácter de 20; la otra tabla se llama compras y tiene los siguientes campos: fecha de tipo fecha, dni numérico de 8, detalle carácter de 20 y precio numérico de 3.
Eso es todo, proba de esta manera, estoy seguro solucionará tu problema, la clave de todo esto es hacer bien la consulta sql.
Suerte.
Ahhh me olvidaba, nunca uso relaciones en el environment, probé un tiempo hacerlo y siempre me trajo complicaciones, la mejor manera es haciendo consultas sql relacionando tablas.
Hola Experto, ya recibí tu resp. Voy a probarlo. Yo también tengo problemas al relacionar tablas en el DataEnvironment, y resulta errores ilógicos a veces. Muchas gracias.
¿Cómo mostrar los datos de dosa tablas en un grid?, Si tengo en el form Un Combobox que muestra los datos de la tabla Profesiones, y al seleccionar una profesión, me muestra las sub profesiones en un grid (2da tabla de sub_prof.dbf), pero además quiero mostrar los datos de una tercera tabla, que corresponden a cada sub profesión, que pertenecen a una profesión, ¿por favor como se podría hacer?
Hola, para este tipo de situaciones lo mejor es armar una consulta SQL donde ralaciones los datos de las 2 tablas, esta consulta la haces en el click del combo, para darte un ejemplo hagamos de cuenta que tenemos las 3 tablas:
A) Profesión
B) SubProfesion
C) DatosSubProfesion
Ahora armemos la consulta SQL:
select A.profesion, B.subprofesion, C.categoriasubprofesion from Profesion A inner join SubProfesion B on A.cod_profesion = B.cod_profesion inner join DatosSubProfesion C on B.cod_subprofesion = C.cod_subprofesion where (A.cod_profesion = thisform.combo1.value) into cursor temporal
Con esta consulta estas uniendo 3 tablas en una consulta SQL y enviando esa consulta a un cursor, este ejemplo es relacionando 3 tablas, donde 1 de las tablas (Profesión) solo la usas para relacionarla con la de (SubProfesion) para que a la hora de elegir una Profesión en el Combo puedas filtrar la consulta según la Profesión elegida.
Si todavía no te queda muy claro el ejemplo, decime bien como se llama cada una de las tablas y los campos que tienen y cuales son los que quieres mostrar en el Grid y en el Combo, con estos datos te puedo ayudar mejor a armar la consulta SQL que necesitas, de todos modos siguiendo la misma estructura que te pase de la consulta podes llegar a armarla, a esa consulta le podes agregar más campos si necesitas.
Suerte.
Hola Miraestemar, gracias de antemano te envío los datos de mis tabla:
Tabla : Carreras.dbf
Espec c(35) kespe c(6) ciclo c(6)
Computación E Informática Comp01 Medio
Corte Y Confección Industrial Cort02 Básico
Secretariado Computarizado Secr03 Básico
Contabilidad Computarizada Cont04 Medio
Electrónica Profesional Elec05 Básico
Tabla: Módulos.dbf
kespe c(6) kmodu c(3) modul c(35)
Comp01 m01 1 - Ofimática y Digitación
Comp01 m02 2 - Cálculo y Presentaciones multimedia
Comp01 m03 3 - Creación de Páginas Web
Comp01 m04 4 - Base de Datos
Comp01 m05 5 - Sistemas Operativos II
Comp01 m06 6 - Programación visual 6
Cort02 m01 1 - Confección de Ropa para niños
Cort02 m02 2 - Confección de Ropa de baño exclusiva
Cort02 m03 3 - Confección de Faldas y Pantalones
Cort02 m04 4 - Confección de Camisas
Cort02 m05 5 - Confección de Ropas de lana
Cort02 m06 6 - Confección de Edredones
Secr03 m01 1 - Digitación y Ofimática
Secr03 m02 2 - Administra documentos de Oficina
Secr03 m03 3 - Etiqueta y presentación documental
Secr03 m04 4 - Organización de Actividades Culturales
Secr03 m05 5 - Organización de la Oficina Gerencial
Secr03 m06 6 - Secretaría Gerencial
Cont04 m01 1 - Mód de Contab 01
Cont04 m02 2 - Mód de Contab 02
Cont04 m03 3 - Mód de Contab 03
Cont04 m04 4 - Mód de Contab 04
Cont04 m05 5 - Mód de Contab 05
Cont04 m06 6 - Mód de Contab 06
Elec05 m06 6 - Mód de Electrónica 06
Elec05 m05 5 - Mód de Electrónica 05
Elec05 m04 4 - Mód de Electrónica 04
Elec05 m03 3 - Mód de Electrónica 03
Elec05 m02 2 - Mód de Electrónica 02
Elec05 m01 1 - Mód de Electrónica 01
Tabla: Semestre.dbf
Kespe c(6) kmodu c(3) kseme c(4) matri n(6,2) finic d(8) ffina d(8)
Comp01 m01 1-05 5 02/04/2005 15/07/2005
Cort02 m04 2-06 40 - - - -
Secr03 m03 1-06 11 - - - -
Secr03 m02 2-05 21 - - - -
Cort02 m02 2-05 20 - - - -
Elec05 m02 2-05 77 02/04/2007 15/07/2007
Comp01 m03 1-06 25 02/04/2006 15/07/2006
Cont04 m06 2-07 200 02/04/2007 15/07/2007
Comp01 m05 1-07 45 02/04/2007 15/07/2007
Cort02 m01 1-05 10 - - - -
Cont04 m01 1-05 100 04/05/2005 - -
Secr03 m01 1-05 31 - - - -
Comp01 m06 2-07 55 02/04/2007 15/07/2007
Cort02 m03 1-06 30 - - - -
Cont04 m03 1-06 300 15/05/2006 08/05/2006
Elec05 m05 1-07 27 - - - -
Elec05 m01 1-05 7 - - - -
Secr03 m05 1-07 51 - - - -
Cont04 m04 2-06 400 - - - -
Cort02 m06 2-07 60 - - - -
Comp01 m04 2-06 35 02/04/2006 15/07/2006
Secr03 m04 2-06 41 - - - -
Cont04 m02 2-05 200 - - - -
Cort02 m05 1-07 50 - - - -
Elec05 m03 1-06 777 - - - -
Secr03 m06 2-07 61 - - - -
Cont04 m05 1-07 500 - - - -
Elec05 m04 2-06 17 - - - -
Comp01 m02 2-05 15 02/04/2005 15/07/2005
Elec05 m06 2-07 37 - - - -
Comp01 m01 2-05 5 - - - -
Secr03 m02 2-05 21 - - - -
Cont04 m02 2-05 200 - - - -
Elec05 m03 2-06 777 - - - -
Comp01 m01 2-07 5 - - - -
Comp01 m03 2-06 25 - - - -
Secr03 m01 2-06 11 - - - -
Comp01 m01 1-06 5 - - - -
Comp01 m01 1-07 5 - - - -
Secr03 m01 1-07 11 - - - -
Cont04 m01 1-06 100 - - - -
Secr03 m02 1-06 21 - - - -
Cort02 m02 1-06 20 - - - -
Comp01 m02 1-06 15 - - - -
Secr03 m03 2-06 31 - - - -
Cont04 m03 2-06 300 - - - -
Cort02 m04 1-07 40 - - - -
Elec05 m04 1-07 17 - - - -
Comp01 m04 1-07 35 - - - -
Comp01 m05 2-07 45 - - - -
Secr03 m05 2-07 51 - - - -
Comp01 m01 2-07 5 - - - -
Lo que quiero es de un combo seleccionar las Carreras (por ejm "Computaciòn"), luego en el grid debe mostrarme solamente los módulos que le corresponden y cada modulo con su respectivo pago o monto de la tabla semestre, siempre correspondiendo en su código de carrera o especialidad más código de Modulo (kmodu) con la tabla semestre.
Entonces, si selecciono :
"Computaciòn":
Mostrar los módulos de computación:
1 - Ofimática y Digitación
2 - Cálculo y Presentaciones multimedia
3 - Creación de Páginas Web
4 - Base de Datos
5 - Sistemas Operativos II
6 - Programación visual 6
Y cada modulo con su pagos (matri) correspondientes, osea:
1 - Ofimática y Digitación
m01 1-05 5 02/04/2005 ...
m01 2-05 5 ...
m01 1-06 5
m01 1-07 5
m01 2-07 5
m01 2-07 5
Estos m01 corresponden al modulo 1 "Ofimática y Digitación" de la especiac. De computación.
Luego del mismo modulo pero de código de es de semestre 2-07, así:
1 - Ofimática y Digitación
m01 2-07 5
m01 2-07 5
Por favor experto, ayúdame... Dios mediante, gracias
Otra pregunta, por favor : Quiero hacer una búsqueda, ingresando el nombre, el paterno y materno de una persona, en distintos cuadros de texto.
Igualmente en la tabla se encuentran los campos separados, así : Nombre c(15), Paterno c(15), y Materno c(15) Por favor dame una manita. ¿Cómo se podría hacer para encontrar un registro, con esas características? Gracias de antemano.
José
Por favor pásame tu dirección de correo electrónico así te mando un proyecto de ejemplo con los datos y tablas que vos me mandaste.
Lo único que te voy a pedir es que una vez que pruebes el ejemplo que te mande, me des el puntaje en todoexpertos, ya que me paso otras veces que envíe ejemplos a través del mail nunca pusieron puntaje a la respuesta que envíe, por favor. Gracias.
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Visual Fox Pro o hacer tu propia pregunta: