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.
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje