FoxPro/Visual FoxPro - como filtrar en un grid

   
Vista:

como filtrar en un grid

Publicado por jose luis (35 intervenciones) el 16/06/2014 17:15:05
buenos dias amigos del foro,

tengo un problemita simple pero lo en hecho de varias formas pero no se como hacerlo, es que quiero filtrar un grid a partir de un valor que lo puse publico y que se lo envio al otro formulario:

desde el primer formulario doy este valor carnet de identidad y quiero que cuando abra el formulario que contiene el grid en donde se deben de mostrar los datos que coincide con el # de carnet de la persona.

trate de filtrar pero no me sale, de antemano mil gracias a todos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

como filtrar en un grid

Publicado por Fernando fernandobussa@hotmail.com (26 intervenciones) el 16/06/2014 21:39:55
Primero tenes que habrir la tabla, filtrarla por el valor que queres y despues cargarle

thisform.grid.RecordSource
thisform.grid.column1.ControlSource

segun el nombre que le diste a la grilla en este caso es Grid
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como filtrar en un grid

Publicado por jose luis (35 intervenciones) el 16/06/2014 22:24:26
por favor expliquemelo con algun ejemplo pq asi en verdad no lo entiendo

para mi seria:

select historia
valorcarnet = ncarnet
set filter to carnet = ncarnet
thisform.grid.recordsource = historia
thisform.grid.column1.controlsource = historia

asi mas o menos o estoy mal, el problema que vengo del mundo del foxpro y estoy mas o menos en el camino pero algunas cosas se me escapan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como filtrar en un grid

Publicado por Fidel José (558 intervenciones) el 16/06/2014 22:33:34
José Luis:
No puedes filtrar un Grid, pero sí puedes hacer unas cuantas cosas con el cursor asociado a través de RecordSource.
Sería interesante que pusieras lo que intentaste hacer, para tener una idea de en qué andas.

Supongamos que buscamos en una tabla o cursor, un número de carné de identidad, si la tabla se llama DatosPers y el campo que tiene los números de carné se llama "NroCarne" (numeric), podemos intentar algo así:
lnNumeroCarneBuscado=1115454411
SELECT * FROM DATOSPERS WHERE NroCarne = lnNumeroCarneBuscado INTO CURSOR curCarne READWRITE
IF _TALLY = 0
MESSAGEBOX("No encontrado")
return
ENDIF
* Si _tally > 0 significa que se han procesado _Tally registros, por lo que hay respuesta y la muestro en otro form.
* Ahora hay varias posibilidades, pero el cursor seguirá existiendo hasta que lo cierres. Si tu segundo formulario es modal, te conviene pasar como parámetro el nombre del cursor (salvo que siempre sea el mismo, en cuyo caso es innecesario)
Por el nombre o por una variable o propiedad que represente el nombre del cursor, tiene que terminar en:
This.Grid1.RecordSource="curCarne"


También puedes usar SET FILTER to NroCarne=LnNumeroCarneBuscado, pero es una práctica totalmente desaconsejada en tablas que se comparten en una red.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como filtrar en un grid

Publicado por jose luis (35 intervenciones) el 16/06/2014 22:51:25
hola amigo fidel jose es que ya me daba pena preguntarte mas cosas es que vas a pensar que soy caradura que estoy haciendo mi sistema, pero en verdad hay muchisimas cosas que todavia no domino amigo mio.

bueno si es simple es que cuando lleno todos los datos personales y de trabajo de un alumno debo de llenar otros datos como por ejemplo tantos cursos x paso si aprobo en fin comprendes y queria que aprovecha ya ese formulario para darle como parametro el # de carnet y en base a eso me sadria solos datos de ese carneet y a su ves seguir incorporandoles mas datos.

por eso queria filtrar y ver como me salia pero como ves perdido estaba yo y ademas este sistema en esta version no es para red mas adelante si ya que lo quieren trabajando en sql pero eso sera mas adelante aunque ya en avanzado mucho en ese sentido.

bueno probare a ver que sale gracias fidel jose y a fernando lo probare a ver que me sale de ahi, dice un dicho que cortando huevos se aprende a capar pq en verdad es lo ultimo que en verdad me falta para que salga el programa completamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como filtrar en un grid

Publicado por jose luis (35 intervenciones) el 17/06/2014 20:29:11
amigo fidel jose mire me da un error,

mire el codigo como lo puse en el init del formulario donde muestro los valores que coincidan con el # de carnet:

thisform.text1.Value = valornombre
thisform.text2.Value = valorcarnet
SELECT * FROM historia WHERE NOCARNETDEIDENTIDAD = valorcarnet INTO CURSOR valores READWRITE
IF _TALLY = 0
This.Grid1.RecordSource = valores
this.grid1.column1.ControlSource = valores
*MESSAGEBOX("No se encontra el Carnet de Identidad: "+valorcarnet)
*RETURN
ELSE
This.Grid1.RecordSource = valores
this.grid1.column1.ControlSource = valores
ENDIF

pero cuando lo llamo desde el formularios desde un boton me sale este error:
this.grid1.recordsource = valores
error: 12
no se encuentra la variable 'VALORES'
method: init

por digame cual fue mi estupidez, le cuento que estuve hasta las 4 am fajao con ese errro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como filtrar en un grid

Publicado por Fidel José (558 intervenciones) el 18/06/2014 01:15:48
Creaste un cursor llamado "valores"

y asignas
this.grid1.column1.ControlSource = valores && valores (sin comillas) es una variable que no existe.

donde lo correcto sería
this.grdi1.REcordsource="VALORES"
this.grid1.column1.ControlSource = "valores.CampoqueMuestrasEnLaColumna1"

Estudia bien cómo se manejan las asignaciones dentro de un control GRid. En general, tienes dos posibilidades:
1) No asignar los ControlSource, dejando que las configure automáticamente (cosa fea, claro)
2) Asignar todos los ControlSource de las columnas.

En cualquier caso, lo primero que debes hacer es poner qué cursor o tabla mostrará el control grid:
Thisform.grdEjemplo.RecordSource="valores"
* Si asigno los controlSource, será conveniente limitar el número de columnas:
With thisform.grdEjemplo
.ColumnCount=5
.Columns[1].ControlSource="valores.campo1"
.Columns[2].ControlSource="valores.campo2"
&& etc
&& Además, querrás ponerle tus propios títulos a las columnas
.Columns[1].Header1.Caption="TituloColumna1"
.Columns[2].Header1.Caption="TituloColumna2"
&&
.Columns[5].Header1.Caption="TituloColumna5"

&& también puedes configurar los .Format e .InputMask de los controles Text1 contenidos en las columnas
&& por ejemplo, si la columna1 tendrá una fecha
.Columns[1].Text1.Format="D"
&& si la columna5 tendrá un número con formato
.Columns[5].text1.Format="Z" && que no muestre los valores cero
.Columns[5].Text1.InputMask="999,999,999.99" && que muestre esta separación de millares.

&& también puedes asignarle un ancho a las columnas
.Columns[1].width=63
.Columns[2].width=180
.Columns[3].width=200
.Columns[4].width=26
.Columns[5].width=80
ENDWITH

En resumen, el control grid es un contenedor que contiene únicamente otros contenedores llamados Columns.
Además tiene otros elementos (DeleteMark, RecordMark, ScrollBars, GridLines, HightLight, etc) que pueden mostrarse o no según la configuración. En el caso de las GridLines, se les puede asignar un color cualquiera (recomendable) y también un grosor distinto del que viene por default (poco recomendable).
Los objeto Columns contienen 1 objeto Header llamado Header1 por defecto y pueden contener uno o más objetos de los cuales solo uno de ellos estará activo y visible (Columns[x].CurrentControl="objetoTal"). Por defecto, cada columna contiene un objeto textbox de nombre "Text1".
Si quieres que el Control Grid sea de solo consulta, las columnas deben seterase
Thisform.grdEjemplo.Setall("readonly",.T.,"column")
También puedes asignarle un tamaño de letra
with thisform.grdEjemplo
* .Setall("Readonly",.t.,"Column")
.Setall("Fontsize",8,"Column")
.Setall("Fontsize",8,"Header")
.Setall("FontBold",.t.,"Header")
.Setall("BackColor",Rgb(73,136,160),"Header")
.Setall("ForeColor",Rgb(255,255,255),"Header")
endwith
También puedes hacer asignaciones dinámicas (simples o complejas)
griDynDark="Rgb(217,220,212)"
GriDynClear="Rgb(233,232,228)"
with thisform.grdEjemplo
.SetAll("DynamicBackColor","IIF(MOD(RECNO( ), 2)=0, &griDynClear , &griDynDark )", "Column")
endwith

El comportamiento del control grid cambia en algunas cuestiones según lo configures como AutoCellSelection=.t. (default) o .F.

En el ejemplo siguiente, muestro cómo se puede enviar una cantidad de parámetros a un formulario a través de un objeto Empty. La idea es la siguiente: Tener un formulario que pueda mostrar cualquier cursor en un control grid.
De acuerdo a la complejidad de los parámetros, podemos obtener diversas funcionalidades de este formulario.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
*Botón de creación de objeto y llamada a un formulario que mostrará un cursor en un control Grid.
        * La clase "Empty" no contiene ninguna propiedad. Todas deben ser creadas.
        * Los nombres de las propiedades serán los que te gusten, pero siempre es bueno tener en cuenta
        * lo que una variable o propiedad representa.
 
	PROCEDURE Cmdgral2.Click
		LOCAL loEmpty as Object
		loEmpty=NEWOBJECT("Empty")
		 ADDPROPERTY(loEmpty,"Cursor","Clientes")
 		ADDPROPERTY(loEmpty,"ControlSource","nombre;idclien;cuit;monto")
 		ADDPROPERTY(loEmpty,"Headers","Nombre;Id_;C.u.i.t.;Crédito")
 		ADDPROPERTY(loEmpty,"Widths","200;40;92;80")
		 ADDPROPERTY(loEmpty,"Format",";;;Z")
 		ADDPROPERTY(LoEmpty,"InputMask",";;;999,999,999.99")
 
		 DO FORM zensayogrd WITH loEmpty         && enviamos el objeto Empty como parámetro
 
 
ENDPROC
 
*Formulario zensayoGrd
* INIT
LPARAMETERS toEmpty
this.newobject("grdEjemplo","Grid")
this.grdEjemplo.Visible=.T.
 
	LOCAL lnColumns,lnHeaders,lnWidths,lnFormat,;
		lnInput,lcCursor,lnSumWid
	LOCAL ARRAY gaFormat(1),gaCols(1),gaHeader(1),gaINput(1)
 
	STORE 0 TO lnSumwid
       * Parser del objeto toEmpty
 
		lnColumns=ALINES(gaCols,toEmpty.ControlSource,1,";")
		lnHeaders=ALINES(gaheader,toEmpty.headers,1,";")
 		lnWidths=ALINES(gaWidths,toEmpty.widths,1,";")
		 lnFormat=ALINES(gaFormat,toEmpty.format,1,";")
 		lnInput=ALINES(gaInput,toEmpty.INputMask,1,";")
 		lcCursor=toEmpty.Cursor
 
	WITH this.grdEjemplo
		.RecordSource=toEmpty.Cursor
		.columnCount=lncolumns
		.Setall("FontSize",8,"column")
		.Setall("FontSize",8,"Header")
		.Setall("readonly",.t.,"column")
		.deletemark=.f.
		.ScrollBars=2
		FOR i=1 TO lnColumns
			lcCampo=gaCols[i]
			.Columns[i].ControlSource='&lcCursor..&lcCampo'
			.Columns[i].header1.Caption=gaHeader[i]
			.Columns[i].Width=EVL(VAL(gaWidths[i]),75)
			.Columns[i].INputmask=EVL(gaInput[i],"")
 
			.Columns[i].format=EVL(gaFormat[i],"")
			lnSumWid=lnSumWid + .Columns[i].Width + 1
        	NEXT
		lnSumWid=lnSumWid+IIF(.REcordMark,15,0);
			+IIF(.ScrollBars>1,10,0)+2
		.Width=lnSumWid
 
	ENDWITH
        && ajusta la medida del form al Control Grid.
	WITH thisform
		.Width=.grdEjemplo.left*2 + .GrdEjemplo.Width
		.Height=.grdEjemplo.top*2 + .grdEjemplo.Height
	ENDWITH
*ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como filtrar en un grid

Publicado por jose luis (35 intervenciones) el 18/06/2014 20:32:13
hola amigo fidel jose,

mire en realidad asi lo tengo o sea mi grid lo contrui asi que cada columna mostrara el valor, le asigne valores a traves de la propiedad a la columna4 en el controlsource le di historia.fechadeinicio y asi sucesivamente al parecer lo que pasaba era que yo no le ponia " como debe de ser disculpame por ser tan novato jaaj na espero ya para este fin de año ser un poquito mas capas de hacer otros sistemas mejores que el actual, pero le agradesco muchisimo la mini clase de grid muchas gracias amigo.

no se ponga bravo amigo mio pero ud en verdad no se acerca ni un tilin a medico mas bien a ing de informatica por la gran capacidad que tiene de explicar muy bien sobre este tema mis felicitaciones y mis respeto.

revisare y luego le contare, mil millones de gracias por su dedicacion a este novato que a veces y no es mentira le da pena preguntarle por esto o por aquello pero no se crea que cuando me travo le pregunto, al reves cuando pido auxilio es pq me he metido hasta tarde para rectificar mis meteduras de pata, en mi nunca encontrara un cara dura.

bueno nos vemos por este mismo rumbo, hasta luego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como filtrar en un grid

Publicado por jose luis (35 intervenciones) el 19/06/2014 19:41:51
hola fidel jose amigo mio todo salio muy bien ya filtrar maravillosamente o sea que cuando le pongo el # de carnet el sistema me da todo los datos del alumno, gracias a ud y otros amigos de este sitio a la verdad que este sitio se debe de ganar 5 millones de veces el premio de oro sin el muchos programadores y novatos no resolveria ni la cuarta parte pq nunca se tiene a mano a alguien a quien consultar un problema o un conflito x en fin felicidades a todos y al administrador del sitio tambien se lleva la mejor parte del premio,

gracias amigos y sigo por aca pq las dudas siempre esta ahi solo que nos vemos a veces la solucion a una situacion determinada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar