Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación, y ofrecer contenidos y publicidad de interés.
Al continuar con la navegación entendemos que se acepta nuestra política de cookies.
Iniciar sesión Cerrar
Correo:
Contraseña:
Entrar
Recordar sesión en este navegador
Iniciar sesiónIniciar sesiónCrear cuentaCrear cuenta

FoxPro/Visual FoxPro - Cómo hago para que Grid desaparece

Vista:
Me gusta: Está pregunta es útil y esta clara
0
No me gusta: Está pregunta no esta clara o no es útil
 
Asunto:

Cómo hago para que Grid desaparece

Autor:Andrés (1 intervención)
Fecha:11/01/2013 22:12:33
Saludos a todos,

Soy nuevo en esto de programar pero elegí Visual FoxPro para trabajar pues conocía que es un buen programa para utilizar bases de datos, ya sean propias o de algún otro programa como SQL.

Tengo una pregunta; diseñé un formulario para el ingreso de cierta información en el cual inserté una Grid, le añadí los datos que me gustaría que se mostrasen y hasta ahí todo perfecto, el problema es al momento de poner nuevo, pues se desaparece la Grid. Cómo puedo hacer para que no se desaparezca y además que se actualice la información que se muestra en la grid.

La codificación que tiene el botón nuevo es la siguiente:

USE nombretabla
SET ORDER TO IDCAMPO
GO BOTTOM in nombretabla
nuevocodigo=VAL(idcampo)+1
thisform.cod.Value=nuevocodigo
thisform.cargo.Value=""
thisform.cargo.setfocus
thisform.guardar.Enabled= .T.

Una aclaración, los campos cod y cargo son dos cuadros de texto donde se ingresa la información.
El cuadro donde se coloca el código genera de manera automática el siguiente código.

La codificación del botón guardar es:

USE nombretabla ALIAS nomtabla
IF EMPTY(ALLTRIM(thisform.cargo.Value))
MESSAGEBOX("No se puede guardar, digite un cargo",0+16,"Error")
thisform.cargo.Value=""
thisform.cargo.setfocus
ELSE
APPEND BLANK
replace idcargo WITH PADL(Alltrim(Str(thisform.cod.value)),8,"0")
replace nombrecar WITH thisform.cargo.value
MESSAGEBOX("Datos guardados",0,"Informativo")
ENDIF
thisform.guardar.Enabled= .F.
thisform.nuevo.SetFocus

Por favor indíquenme si estoy en algún error, pero principalmente mi problema es cuando se desaparece el o la grid (no sé como es realmente) y que no se actualiza sino hasta que cierro el formulario y lo vuelvo a abrir.

Espero haber podido ser un poco claro con mi inquietud.

Muchas gracias de antemano.
Responder
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

Cómo hago para que Grid desaparece

Autor:Edgar Zambrano (45 intervenciones)
Fecha:11/01/2013 22:17:56
al final de tu código del botón guardar coloca esta linea

thisform.Refresh()

esto hará que se actualicen todos los controles del formulario
Comentar
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

Cómo hago para que Grid desaparece

Autor:Fidel (48 intervenciones)
Fecha:12/01/2013 00:57:16
No sé cómo tendrás ordenadas las cosas, pero observo lo siguiente:
Si no estás utilizando Entorno de Datos, tienes que abrir las tablas en el Load del formulario y cerrarlas en el Unload.
Si la tabla NombreTabla está abierta y la vuelves a abrir (aunque sea con un alias), y esa tabla estaba asociada al control grid, éste quedará en blanco. Eso porque al enviar otra instrucción USE, la tabla que estaba abierta se cierra y se vuelve a abrir, lo que desengancha la relación con el control grid.

Precaución: Si no utilizas Entorno de Datos, deberás tener alguna forma de evitar que las tablas se cierran cuando se abre y se cierra otro formulario. Si no te gusta el entorno de datos, tendrás que crear un cursor que controle que procesos o formularios tienen las tablas abiertas.

En cuanto al control de codificación automática, te sugiero que utilices otra tabla donde tengas tus numeradores, con un código de búsqueda. Básicamente sería una tabla que contiene:
Código de Búsqueda, Descripción de lo que se busca, número.
Ahí te doy una idea sobre como generar esta tabla y cómo se puede utilizar con las siguientes rutinas:

****************************** PROCEDURE GEN_NUMERA() ****************************** * Rutina de Instalación del sistema * Rutina de Verificación del sistema * El nombre de tabla y el campo que lleva la numeración * deben preverse para una rutina de repaso de numeradores. * Se pueden agregar otras condiciones, según se necesite *********************************************************** if !file("NUMERA") CREATE TABLE NUMERA ("CODIBUS" C(4),"DESCRIP" C(40),"NUMERO" I,; "TABLA" C(8),"CAMPO" C(12), "TIPO" C(1),"NCHAR" I) select numera INDEX ON CODIBUS TAG INUMERO USE ENDIF USE NUMERA IN 0 SHARED Dimension ganum(3,7) ganum[1,1]="CLI" && Codigo de busqueda de numerador GANUM[1,2]="Tabla Clientes" && descripcion ganum[1,3]=0 ganum[1,4]="CLIENTES" ganum[1,5]="IDCLIEN" GANUM[1,6]="C" GANUM[1,7]=6 ganum[2,1]="PRO" GANUM[2,2]="Tabla Proveedores" ganum[2,3]=0 ganum[2,4]="PROVEDOR" GANUM[2,5]="IDPROV" ganum[2,6]="C" GANUM[2,7]=4 ganum[3,1]="ORD" GANUM[3,2]="Tabla Ordenes" ganum[3,3]=0 ganum[3,4]="ORDENAR" GANUM[3,5]="IDORD" ganum[3,6]="N" GANUM[3,7]=0 For i=1 to ALEN(ganum,1) if !indexseek(ganum[i,1],.f.,"NUMERA","INUMERO") INSERT INTO NUMERA (codibus,descrip,numero,tabla,CAMPO,TIPO,NCHAR) ; VALUES (ganum[i,1],ganum[i,2],ganum[i,3],ganum[i,4],ganum[i,5],ganum[i,6],ganum[i,7]) endif next select numera USE ENDPROC ************************************************ PROCEDURE NUMERE(xcCodiBus,xlActualiza,xlUltimo) ************************************************ * Ejemplo: * nVal=Numere("CLI",.t.) , actualiza el numerador. * Si todavía no se graba, pero se quiere saber cuál es el código * nVal=Numere("CLI",.F.) , no actualiza el numerador * Si xlUltimo=.T., devolverá el último utilizado y no actualiza **************************************************************** * Al grabar un nuevo registro de Clientes, sería; * select clientes * APPEND BLANK * REPLACE IDCLIEN WITH NUMERE("CLI",.T.),; * NOMBRE WITH Thisform.TxNombre.value,; * etc.. * **************************************************************** LOCAL nValor,lshut,lctipo,lnChar if vartype(xcCodibus)#"C".or.empty(xcCodibus) Messagebox("Parámetro erróneo",0,"Mensaje") return 0 endif if !used("NUMERA") use numera in 0 SHARED SELECT NUMERA lShut=.t. endif xcCodibus=Upper(alltrim(xcCodibus)) if !indexseek(xcCodibus,.f.,"NUMERA","INUMERO") Messagebox("Parámetro &xcCodibus no definido",0,"Mensaje") return 0 endif indexseek(xcCodibus,.t.,"NUMERA","INUMERO") lctipo=tipo lnChar=nChar if !xlUltimo nValor=Numero + 1 if xlActualiza if rlock() replace numero with nValor unlock endif endif else nValor=numero endif if lshut && SI AL INICIO ESTABA CERRADA, SE CIERRA select numera USE ENDIF REturn iif(lcTipo="N",nValor,Padl(ltrim(str(nValor)),lnchar,"0") ENDPROC

Siguiendo el ejemplo, en el LOAD del formulario (supongamos Clientes);
USE CLIENTES IN 0 SHARED
USE NUMERE IN 0 SHARED

En el UNLOAD del form
IF USED("CLIENTES")
SELECT CLIENTES
USE
ENDIF
IF USED("NUMERA")
SELECT NUMERA
USE
ENDIF

En el evento Valid del TExtbox que contendrá el nombre del cliente
Thisform.CmGrabar.Enabled=!empty(this.Value)
* CmGrabar se habilita solamente si se ingresó el nombre.
* igualmente en el Click de Grabar se pueden testear otras cosas
* Click de CmGrabar
SELECT CLIENTES
APPEND BLANK
REPLACE IDCLIEN WITH NUMERE("CLI",.T.),;
NOMBRE WITH THISFORM.Txnombre.value,;
IDFISCAL WITH loquesea, etc
UNLOCK
Thisform.Cod.Value=NUmere("CLI",.F.) && propone el siguiente código
THISFORM.TxNombre.value="" && limpiar cuadros
Thisform.Grid1.Refresh && actualiza el control grid


Nota: Estoy poniendo USE TABLA IN 0 SHARED. Obviamente esto no tiene mucho sentido. De todos modos debes usar SHARED para todas las tablas que piensas compartir,
De entrada, debes definir alguna variable Pública que contenga la dirección donde están los datos.
Por ejemplo:
release MYDAT
PUBLIC MYDAT
MYDAT="F:\SISTEMA\DATOS" && Esto se puede configurar de diversas formas.

Luego:
USE &MYDAT\CLIENTES IN 0 SHARED

Ó

lcFile=addbs(mydat)+"CLIENTES"
USE &lcFile IN 0 SHARED
Comentar
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

Cómo hago para que Grid desaparece

Autor:neo (1467 intervenciones)
Fecha:12/01/2013 01:05:54
Saludos!
Para volver a mostrar los datos actualizados, te recomiendo echarle un ojo a estas propiedades:

thisform.grid1.recordsource='mi-tabla'
thisform.grid1.resfresh


Aunque personalmente, cuando deseo actualizar los datos de un grid y que no me muestre en blanco lo que hago es redibujar el grid manualmente, por ejemplo digamos que tengo 2 columnas.

En un boton escribe esto:
thisform.grid1.recordsource=""
thisform.grid1.columncount=3
thisform.grid1.column1.header1.caption="Nombre"
thisform.grid1.column2.header1.caption="Direccion"
thisform.grid1.column1.width=120
thisform.grid1.column2.width=150

Todo esto segun tu configuracion real del grid.

Suerte!
Comentar