Como usar grilla FOXPRO sin enlazar a una Tabla

Programo desde hace muchísimos años en varios lenguajes, y me ha tocado (por circunstancias laborales) tener que aprender aceleradamente FOXPRO.
El problema que en cuentro es que estoy desarrollando una compleja CONSULTA de Productos, que necesita mostrar los datos en una GRILLA, pero cada columna viene de tablas y con filtros diferentes y complejos.
Esto en otros lenguajes lo resuelvo fácilmente ejecutando rutinas separadas y cargando los datos en una Grilla por código.. Es decir, sin que la grilla esté conectada a ninguna BD o TABLA.
Grid1.textmatrix(1,2)="PEPE"
o
Grid1.row=1
Grid1.col=2
Grid1.text="PEPE"
El problema es que le he dado muchísimas vueltas y el GRID que usa FOXPRO parece que solo funciona atado a una TABLA... Lo cual no me deja herramientas para poder lograr lo que quiero...
Se puede hacer lo que deseo, ¿o tengo que si o si crear TABLAS o CURSORES para poder usar una GRILLA?

1 Respuesta

Respuesta
1
Usar una grilla sin origen de datos en Fox, no tiene sentido. El propósito de un grid en fox es mostrar datos de un cursor de datos o tabla. Cuando al grid se le asigne su origen de datos, éste obtendrá la apariencia necesaria (filas, columnas, texto de columnas)
Tu dices que : "El problema que en cuentro es que estoy desarrollando una compleja CONSULTA de Productos, que necesita mostrar los datos en una GRILLA, pero cada columna viene de tablas y con filtros diferentes y complejos."
Aquí no veo el problema, tu consulta, sea sencilla o compleja, generará un cursor, y éste será el origen de datos del grid. La consulta es la que debe manejar la complejidad de cuantas tablas y cuantos filtros se deben manejar. El grid sólo mostrará lo que resulte de la consulta. Éste es simplista.
Estimado,
Muchas Gracias por contestar.. pero como te decía, no es posible armar un cursor o tabla con la complejidad de todas estas consultas..
En conclusión.. no puedo hacerlo vía una sentencia SELECT, por más compleja que sea..
Estoy probando usar el LISTBOX multicolumna... no es lo mismo.. ni visualmente ni a nivel performance... pero bueno.. es lo que hay..
Y no coincido con que si no usas una GRILLA con una tabla no tiene sentido...
Saludos
Pablo
Dices que estás probando el listbox multicolumna. Éste es una versión más limitada que el grid. No entiendo porqué tratas de mostrar datos con éste control, de hecho ya te has dado cuenta del "performance".
¿De qué se trata la "compleja CONSULTA de Productos"? ¿Cuál es el origen de datos y cual es el resultado de la consulta? Explícame eso, para ver si encontramos alternativas.
Y porqué no coincides conmigo en lo que planteo. ¿Has descubierto algo nuevo?
Tal como dices, la solución es usar un GRID, entonces, lo que hice fue colocar todo el resultado del LISTBOX, en un CURSOR, y luego intentar enlazarlo a una GRILLA.
El problema es que a pesar de enlazar el CURSOR (el cual compruebo con un BROWSE, que tiene los datos bien grabados), en la grilla no se muestra nada..
Te pego el código que use..
CREATE CURSOR MaxiCons (Suc N(3), Nombre C(20), Minimo N(6), maximo N(6), Pila N(6), VtaUlt N(8), StkUlt N(6), VtaAct N(6), Dias N(3))
FOR I = 1 TO maxfila
   APPEND BLANK
   REPLACE SUC WITH MATRIZ(I,1)
   REPLACE NOMBRE WITH MATRIZ(I,2)
   REPLACE MINIMO WITH MATRIZ(I,3)
   REPLACE MAXIMO WITH MATRIZ(I,4)
   REPLACE PILA WITH MATRIZ(I,5)
   REPLACE VTAULT WITH MATRIZ(I,6)
   REPLACE STKULT WITH MATRIZ(I,7)
   REPLACE VTAACT WITH MATRIZ(I,8)
   REPLACE DIAS WITH MATRIZ(I,9)
NEXT
WITH thisform.g
   .RecordSource=MaxiCons
   .recordsource=.recordsource
   .ColumnCount=9
   .readonly=.T.&&solo lectura
   .allowheadersizing=.f.
   .allowrowsizing=.f.
   .ChildOrder = "Suc"
   .Visible = .T.  && Grid control visible
   .FontSize = 8  && Tamaño de la Fuente para el texto
   .Forecolor = RGB(0,0,0) && Texto en Negro
   .GridLineColor = RGB(0,0,0) && Color de las lineas que separan las celdas
   .GridLines = 3 && Especifica si el control grid se muestra en lineas horizontales y verticales
   .Highlight = .T. && La celda aparece selecionada
   .HighlightBackColor = RGB(0,64,128) && Color de la Fila Selecionada
   .HighlightRowLineWidth = 2 && El ancho del resaltado de la fila selecionada
   .HighlightStyle = 2 && Si la fila esta resaltada, permanece resaltada cuando el usuario cambia el enfoque a otro control del formulario
   .Panel = 1
   .RecordSourceType = 1
   .RowHeight = 18 && El alto de las filas de la grid
   .Tabindex = 1 && Orden de la tabulacion
   .View = 0 && Tipo de Vista
   .column1.ControlSource = "Suc"
   .column2.ControlSource = "Nombre"
   .column3.ControlSource = "Minimo"
   .column4.ControlSource = "Maximo"
   .column5.ControlSource = "Pila"    
   .column6.ControlSource = "VtaUlt"
   .column7.ControlSource = "StkUlt"
   .column8.ControlSource = "VtaAct"
   .column9.ControlSource = "Dias"
   .column1.header1.caption="Suc"
   .column2.header1.caption="Nombre"
   .column3.header1.Caption = "Minimo"
   .column4.header1.Caption = "Maximo"
   .column5.header1.Caption = "Pila"
   .column6.header1.Caption = "VtaUlt"
   .column7.header1.Caption = "StkUlt"
   .column8.header1.Caption = "VtaAct"
   .column9.header1.Caption = "Dias"
   FOR grdNegrit=1 TO 9
       ncol="column"+ALLTRIM(STR(grdNegrit))+"."
            .&ncol.header1.FontBold=.T.
            .&ncol.header1.Alignment=0
   ENDFOR
   .Refresh
ENDWITH

¿Habrá qué cerrar el CURSOR antes de mostrarlo? supongo que si se cierra se pierde.. ¿qué debo hacer?
Muchísimas Gracias por tu ayuda.
Saludos
Prueba con colocar en la propiedad:
.RecordSource="MaxiCons"  && Usa las comillas.
Y obvia poner:  .recordsource=.recordsource
Esto último no es necesario. Me avisas.
Gracias por contestar...
Me muestra los títulos, las lineas divisorias.. pero no muestra la información..
Con el cambio que me has pasado.. al menos no aparece la grilla como un gran cuadrado blanco.. pero tampoco me muestra la info.
¿Qué puede ser?
Gracias
En este código, fuera de lo que comenté, no hay nada fuera de lugar. Está bien y el grid debiera mostrar los datos.
De hecho, con sólo la línea:
.RecordSource='MaxiCons'
Debe mostrar los datos. Claro, colocando RecordSourceType en 1.
Fíjate si hay algo que esté cerrando el cursor, antes de asignarlo en tu grid.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas