FoxPro/Visual FoxPro - VFP Al iniciar el formulario 2 páginas estén activas y a su vez muestren data grids

   
Vista:
Imágen de perfil de daniel

VFP Al iniciar el formulario 2 páginas estén activas y a su vez muestren data grids

Publicado por daniel fox_bravo@hotmail.es (21 intervenciones) el 11/07/2017 15:44:58
Necesito que cuando inicie el formulario:
1.- Estén activo 2 páginas de un total de 4 páginas
2.- Estas 2 páginas activas muestren datagrid de diferentes tablas, Es decir que al iniciar el formulario en la página 1 muestre un grid cargado con los datos de la tabla "clientes" y que la página 2 muestre un grid con los datos de la tabla "proveedores"
Desde ya mi agradecimiento a los que puedan ayudarme con el tema
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

VFP Al iniciar el formulario 2 páginas estén activas y a su vez muestren data grids

Publicado por Fidel José (566 intervenciones) el 11/07/2017 16:44:12
Y cual es tu problema?
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
Imágen de perfil de daniel

VFP Al iniciar el formulario 2 páginas estén activas y a su vez muestren data grids

Publicado por daniel (21 intervenciones) el 11/07/2017 19:17:02
Buenas tardes, el problema es que no se como hacer lo que menciono en los puntos 1 y 2 del mensaje anterior, te agradesco por tu interes
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

VFP Al iniciar el formulario 2 páginas estén activas y a su vez muestren data grids

Publicado por Fidel José (566 intervenciones) el 11/07/2017 20:46:07
Como no aportas nada, tendremos que dedicarnos a suponer un entorno.
Supuestamente cuando hablas de páginas, te referieres a que tienes un objeto pageframe montado sobre el formulario.
Aunque lo verdaderamente recomendable es tene una clase grid, también voy a suponer, dada la pregunta, que no tienes.
Siendo así, lo único que tienes que hacer es montar un control grid sobre el page1 y otro sobre el page2.
Luego en el init del form:
Thisform.pageframe1.Page1.Grid1.RecordSource="Clientes"
Thisform.pageframe1.Page2.Grid1.RecordSource = "Proveedores"
Con eso tienes el principio.
Si necesitas algo más elaborado, lo aconsejable es trabajar una clase grid para que sea como te gusta y con eso tendrás facilidad de implementación y una puesta estandarizada para el sistema.
La gran ventaja de las clases es que solamente necesitas modificar la clase para que se modifiquen todos su herederos. No obstante, en clases complejas como una clase grid, conviene ajustar al máximo posible con unos pocos ejemplos, lo suficientemente generales.
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
Imágen de perfil de daniel

VFP Al iniciar el formulario 2 páginas estén activas y a su vez muestren data grids

Publicado por daniel (21 intervenciones) el 11/07/2017 21:16:50
Hola Fidel gracias por tu intervención líneas abajo te adjunto el código que tengo en init del formulario en cuestión
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
PARAMETERS _LLAMA
PUBLIC namecaption &&Declaramos XFILEUSE como variable pública
 
CLOSE DATABASES&&cerramos toda la bd y tablas abiertas
 
SET MULTILOCKS ON&&Nos permite bloquear un conjunto de registros
=DataRuta()
=Crearconductores()&&crea y abre la tabla proveedores
=Creardocumento_personal()
=creartipo_documento()
=crearcond_personal_doc()
SELECT conductores
SET ORDER TO xitemcond
GO TOP
 
WITH thisform.pageframe1.page1.grdProveedores&&establecemos las propiedades del grid
	.columncount=14&&establece el numero de columnas
	.height=460&&el alto de la grilla
	.width=970&&define el ancho de la grilla
	.readonly=.T.
	.recordsourcetype=1
	.highlightbackcolor=RGB(0,64,128)&&el color de fonde de la fila de un grid
	.allowheadersizing=.F.
	.allowrowsizing=.f.
	.highlightstyle=2&&resalte de una fila
	.left=5
	.visible=.t.
	.fontsize=8
	.forecolor=RGB(0,0,0)
	.gridlinecolor=RGB(0,0,0)
	.gridlines=3&&Determina si se muestran líneas horizontales y verticales
	.highlight=.t.
	.highlightbackcolor=RGB(0,64,128)&&color de fondo de la fila seleccionada
	.HighlightForeColor = RGB (255,255,255)
	.highlightrowlinewidth=2&&grosor de borde ke rodea la fila
	.highlightstyle=2
	.name="grdProveedores"
	.panel=1
	.rowheight=18&&el alto de las filas
	.tabindex=1
	.top=31
	.view=0
	.recordsource="conductores"
	.childorder="xitemcond"
 
	.column1.ControlSource = "conductores.xitemcond"
	.column2.ControlSource = "conductores.codigo"
	.column3.ControlSource = "conductores.tipo_perso"
	.column4.ControlSource = "conductores.nombre"
	.column5.ControlSource = "conductores.dni"
    .column6.ControlSource = "conductores.direccion"
	.column7.ControlSource = "conductores.celular"
	.column8.ControlSource = "conductores.telf_fijo"
    .column9.ControlSource = "conductores.fecha_ingr"
    .column10.ControlSource = "conductores.email"
	.column11.ControlSource = "conductores.fecha_sali"
	.column12.ControlSource = "conductores.motiv_baja"
	.column13.ControlSource = "conductores.contacto"
	.column14.ControlSource = "conductores.tlf_contac"
 
	.column1.header1.caption = "Item"
	.column2.header1.Caption = "Código"
	.column3.header1.Caption = "Tipo Personal"
	.column4.header1.Caption = "Nombre"
	.column5.header1.Caption = "DNI"
	.column6.header1.Caption = "Direccion"
    .column7.header1.Caption = "Celular"
	.column8.header1.Caption = "Tlf. Fijo"
	.column9.header1.Caption = "Fecha Ingreso"
	.column10.header1.Caption = "Email"
	.column11.header1.Caption = "Fecha Salida"
	.column12.header1.Caption = "Motivo de Baja"
	.column13.header1.Caption = "Persona de Contacto"
	.column14.header1.Caption = "Tlf. Contacto"
 
 
	FOR grdNegrit=1 TO 14
	ncol="column"+ALLTRIM(STR(grdNegrit))+"."
	.&ncol.header1.FontBold=.T.
	.&ncol.header1.Alignment=0
	ENDFOR
 
	.column1.Width = 30
	.column2.Width = 63
	.column3.Width = 90
	.column4.Width = 180
	.column5.Width = 80
	.column6.Width = 180
	.column7.Width = 80
	.column8.Width = 80
	.column9.Width = 80
	.column10.Width = 100
    .column11.Width = 80
    .column12.Width = 180
    .column13.Width = 180
    .column14.Width = 80
 
	.allowcellselection=.f.
	.setfocus
	.Refresh
 
ENDWITH
 
thisform.pageframe1.page2.Enabled= .F.
thisform.pageframe1.page3.Enabled= .F.
 
thisform.Refresh


Aquí es donde necesito establecer las propiedades a pageframe1.page4 para que al inicio me muestre los datos de otra tabla en en un 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

VFP Al iniciar el formulario 2 páginas estén activas y a su vez muestren data grids

Publicado por Fidel José (566 intervenciones) el 11/07/2017 23:18:22
Te doy una idea de cómo se puede mejorar esto, apuntado a la creación de una clase.
Me ahorré todas las comprobaciones de programación defensiva, que hay que ponerlas

En este init del form hago dos llamadas al método agregado Config_Grid. La primer la copié de tu código (ojo con errores de transcripción). La segunda es una ensalada, pero ahí tienes que modificar los datos correspondientes.
Se te ahorrará mucho trabajo si aprendes a manipulear objetos como tales, evitando las macrosustituciones. Y además el sistema funcionará más rápido. Las macrosustituciones se tienen que resolver en tiempo de ejecución. Las referencias a objeto son un camino más directo y eficiente.

Init del form
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
PARAMETERS _LLAMA
PUBLIC namecaption &&Declaramos XFILEUSE como variable pública
 
CLOSE DATABASES	&&cerramos toda la bd y tablas abiertas
 
SET MULTILOCKS ON	&&Nos permite bloquear un conjunto de registros
=DataRuta()
=Crearconductores()&&crea y abre la tabla proveedores
=Creardocumento_personal()
=creartipo_documento()
=crearcond_personal_doc()
SELECT conductores
SET ORDER TO xitemcond
GO TOP
 
LOCAL loObj as Object
*<Configurando Grid en Page1>
loObj = NEWOBJECT("Empty")
ADDPROPERTY(loObj,"oGrid",thisform.pageframe1.page1.grdProveedores)
ADDPROPERTY(loObj,"cCursor","conductores")
ADDPROPERTY(loObj,"column_list","xitemcod,codigo,tipo_perso,nombre,dni,direccion,celular,telf_fijo,fecha_ingr,email,fecha_sali,motiv_baja,contacto,tlf_contac")
ADDPROPERTY(loObj,"Header_list","Item,Código,Tipo Personal,Nombre,DNI,Dirección,Celular,Tlf. Fijo,Fecha Ingreso,Email,Fecha Salida,Motivo de Baja,Persona de Contacto,Tlf. Contacto")
ADDPROPERTY(loObj,"Width_List", "30,63,90,180,80,180,80,80,80,100,80,180,180,80")
ADDPROPERTY(loObj,"nTop",31 )
ADDPROPERTY(loObj,"nLeft",5 )
ADDPROPERTY(loObj,"nHeight",460 )
ADDPROPERTY(loObj,"nWidth",970 )
ADDPROPERTY(loObj,"AllowCellSelection",.t.)
 
this.grid_config(loObj)
 
loObj = null
*</Configurando Grid en Page1>
 
*<Configurando Grid en Pagex>
loObj = NEWOBJECT("Empty")
ADDPROPERTY(loObj,"oGrid",thisform.pageframe1.page4.grdComoSeLlame)
ADDPROPERTY(loObj,"cCursor","elOtroCursor")
ADDPROPERTY(loObj,"column_list","xitemcod,codigo,tipo_perso,nombre,dni,direccion,celular,telf_fijo,fecha_ingr,email,fecha_sali,motiv_baja,contacto,tlf_contac")
ADDPROPERTY(loObj,"Header_list","Item,Código,Tipo Personal,Nombre,DNI,Dirección,Celular,Tlf. Fijo,Fecha Ingreso,Email,Fecha Salida,Motivo de Baja,Persona de Contacto,Tlf. Contacto")
ADDPROPERTY(loObj,"Width_List", "30,63,90,180,80,180,80,80,80,100,80,180,180,80")
ADDPROPERTY(loObj,"nTop",31 )
ADDPROPERTY(loObj,"nLeft",5 )
ADDPROPERTY(loObj,"nHeight",460 )
ADDPROPERTY(loObj,"nWidth",970 )
ADDPROPERTY(loObj,"AllowCellSelection",.t.)
 
this.grid_config(loObj)
 
loObj = null
 
*</Configurando Grid en Pagex>

Método agregado al formulario: Grid_Config
Este es un método bastante general (habría que ver el tema del highlight, aunque eso es muy personal).
La idea es escribir solamente una vez el código de configuración y enviar los parámetros necesarios.
Como los parámetros pueden llegar ser más de 26 (máximo permitido), resulta mejor crear un objeto con propiedades y pasar el objeto como parámetro. En este caso, tomé un objeto "Empty", pero muchas veces resulta conveniente crear una clase custom que ya tenga las validaciones necesarias.
Si hacés una clase grid, todas las validaciones pueden estar en la misma clase.
Fijate cómo a partir de listas de datos se pueden alimentar propiedades, transformándolas en Arrays y con el valor conveniente.
Fijate lo sintético que queda *Configuración del contenido.

Alternativamente puedes meter el método Grid_config en una clase custom y pegar la clase al formulario. Esto te permite reutilizar el código sin tener que volver a pegarlo, con solo meter la clase custom en el form, ya como objeto aéreo o pegando la custom en el formulario. Al menos hasta que desarrolles tu clase grid.
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
*<Method Grid_Config>
LPARAMETERS toParam
LOCAL lnColumns,lnHeaders,lnWidths,i
LOCAL ARRAY laColumns(1),laHeaders(1),laWidths(1)
 
lnColumns = ALINES(laColumns,toParam.Column_list,1,CHR(44))
lnHeaders = ALINES(laHeaders,toParam.Header_List,1,CHR(44))
lnWidths = ALINES(laWidhts,toParm.Width_list,1,CHR(44))
 
WITH toParam.oGrid
	.columncount= m.lnColumns
	.recordsource=toParam.cCursor
	.allowcellselection= toParam.AllowCellSelection
 
	.left= toParam.nLeft
	.top= toParam.nTop
	.height= toParam.nHeight	&&el alto de la grilla
	.width= toParam.nWidth		&&define el ancho de la grilla
 
*	.readonly=.T. El readonly corresponde al objeto column y siempre que AllowCellSelection = .t.
*					De lo contrario es redundante.
*	.Setall("Readonly",.t.,"Column")
*	.recordsourcetype=1 && (default)
 
	* Estas propiedades deberían asignarse en una clase Grid
	.fontsize=8
	.highlightbackcolor=RGB(0,64,128)&&el color de fonde de la fila de un grid
	.allowheadersizing=.F.
	.allowrowsizing=.f.
	.highlightstyle=2	&&resalte de una fila
 
*	.visible=.t.
 
*	.forecolor=RGB(0,0,0)
	.gridlinecolor=RGB(0,0,0)
	.gridlines=3	&&Determina si se muestran líneas horizontales y verticales
	.highlight=.t.
	.highlightbackcolor=RGB(0,64,128)&&color de fondo de la fila seleccionada
	.HighlightForeColor = RGB (255,255,255)
	.highlightrowlinewidth=2	&&grosor de borde ke rodea la fila
	.highlightstyle=2
*	.name="grdProveedores"	Esto se define al crear el objeto. NUnca con el objeto ya definido.
*	.panel=1		&& no se necesita porque no se indica Partition y Panel = 1 es Default
	.rowheight=18	&&el alto de las filas
*	.tabindex=1		&& No es buena idea indicar tabindex en el objeto.
					&& Indicas los tabindex en el diseñador de formulario
					&& o todos los controles mediante alguna estrategia, el init del form
 
*	.view=0			&& es su valor por defecto
 
*	.childorder="xitemcond"  ESto no conviene utilizarlo. Mejor utiliza SET ORDER TO
ENDWITH
* Configuración del contenido
FOR i = 1 TO m.lnColumns
	toParam.oGrid.Columns(i).ControlSource = toParam.cCursor+"."+laColums[i]
	toParam.oGrid.Columns(i).Width = VAL(laWidths[i])
	WITH toParam.oGrid.Columns(i).header1
		.Caption = laHeaders[i]
		.FontBold = .t.
		.alignment = 0
	ENDWITH
NEXT
toParam.oGrid.refresh
toParam.oGrid = null
toParam = null
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
Revisar política de publicidad