Grille VFP

- - Dernière réponse : michelatoutfox
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
- 6 août 2012 à 09:40
Bonjour,
J'ai un problème au niveau de manipulation de grille dans VFP9.
Quand je clic sur une cellule de la colonne1 une fenêtre2 apparait bien et le saisie des données se déroule bien ainsi l'enregistrement des données dans la base. le problème c'est quand je valide les données on cliquons sur le bouton Enregistrer les enregistrements apparait dans la grille mais si je clic de nouveau sur une cellule de la colonne1 rien ne se passe la fenêtre2 n'apparait pas
******** Evenement,Click de bouton de commande Enregistrer ************
THISFORM.pageframe1.reglement.grid1.recordsource=THISFORM.pageframe1.reglement.grid1.recordsource
THISFORM.pageframe1.reglement.Grid1.SetAll("DynamicBackColor",;
"IIF(MOD(RECNO( ), 2)=1, RGB(255,255,255);
, RGB(192,220,192))", "Column") && Alterne les enregistrements blanc et vert
THISFORM.pageframe1.reglement.Grid1.Visible = .T. && Le contrôle Grid (grille) est visible
THISFORM.pageframe1.reglement.Grid1.Column1.Header1.Caption = '°Bon N'
THISFORM.pageframe1.reglement.Grid1.Column2.Header1.Caption = 'Date'
THISFORM.pageframe1.reglement.Grid1.Column2.Width = 70
THISFORM.pageframe1.reglement.Grid1.Column2.Text1.Enabled = .F.
THISFORM.pageframe1.reglement.Grid1.Column3.Width = 30
THISFORM.pageframe1.reglement.Grid1.Column1.Alignment = 2
THISFORM.pageframe1.reglement.Grid1.Column2.Alignment = 2
THISFORM.pageframe1.reglement.Grid1.Column1.Header1.Alignment = 2
THISFORM.pageframe1.reglement.Grid1.Column2.Header1.Alignment = 2
Afficher la suite 

6 réponses

Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
0
Merci
Bonjour,

il nous manque des informations, pour pouvoir t'aider. Quelle est la fenêtre qui apparait, quand tu cliques sur une cellule de la colonne 2? tu as écrit du code pour ça? si oui, il faudrait que tu nous le montre.

Je ne comprends pas pourquoi tu as ce code dans ton bouton enregistrer. A quoi sert la première ligne de code (tu dis que le recordsource est égal à lui-même)? Pourquoi es-tu obligé de redéfinir ces captions, le enabled de Text1, etc..? tu les as modifié quelque part? si oui, il faudrait qu'on sache où, et pourquoi, et comment.
Commenter la réponse de michelatoutfox
0
Merci
****** Bouton Enregistrer
****** Click evenment

CLOSE DATABASES

thisform.consulter.enabled=.t.
thisform.supprimer.enabled=.t.
thisform.enregistrer.enabled=.f.
thisform.nouveau.enabled=.t.

set default to C:\tarification\base\
open database internet.dbc

SELECT 1
use navigation
go bottom

THISFORM.code_nav.value=code_nav
STORE code_nav TO x

THISFORM.date_nav.value=date_nav
STORE date_nav TO y

SELECT 2
USE lig_nav
GO Bottom

replace date_nav WITH y
replace code_nav WITH x

THISFORM.pageframe1.reglement.grid1.recordsource=THISFORM.pageframe1.reglement.grid1.recordsource
THISFORM.pageframe1.reglement.Grid1.SetAll("DynamicBackColor",;
"IIF(MOD(RECNO( ), 2)=1, RGB(255,255,255);
, RGB(192,220,192))", "Column") && Alterne les enregistrements blanc et vert
THISFORM.pageframe1.reglement.Grid1.Visible = .T. && Le contrôle Grid (grille) est visible
THISFORM.pageframe1.reglement.Grid1.Column1.Header1.Caption = '°Bon N'
THISFORM.pageframe1.reglement.Grid1.Column2.Header1.Caption = 'Date'
THISFORM.pageframe1.reglement.Grid1.Column2.Width = 70
THISFORM.pageframe1.reglement.Grid1.Column2.Text1.Enabled = .F.
THISFORM.pageframe1.reglement.Grid1.Column3.Width = 30
THISFORM.pageframe1.reglement.Grid1.Column1.Alignment = 2
THISFORM.pageframe1.reglement.Grid1.Column2.Alignment = 2
THISFORM.pageframe1.reglement.Grid1.Column1.Header1.Alignment = 2
THISFORM.pageframe1.reglement.Grid1.Column2.Header1.Alignment = 2
*********************************************************************
****** La cellule Text1 de la Colonne1
****** Click evenment
*** pageframe1.reglement.Grid1.Column1.Text1
**** Click evenment
do form C:\tarification\formulaires\reglement.scx
*************************************************************************
**** J'ai crée l'Objet Grid1 par Assistant Controle...
**** Propriétés Grid1 sont :
ChildOrder : Code_nav
LinkMaster : Navigation
RecoedSource : lig_nav
RecoedSourceType : 1- Alias
RelationalExpr :Code_nav
Commenter la réponse de nizarmezzi
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
0
Merci
Ouh là là... il va y avoir pas mal de choses à corriger.

Déjà, pour commencer, tout ce qui concerne l'ouverture de database et de table ne devrait absolument pas être dans ce code d'évenement. Pourquoi l'as-tu mis ici?
Ensuite, à la place de
SELECT 1
use navigation
tu devrais écrire USE navigation in 0, en précisant aussi SHARED.
Et à la place de ton SELECT 2, tu aurais intéret à utiliser l'alias qui est ouvert dans cette zone 2 (par exemple SELECT clients), ça sera plus lisible et maintenable.

En ce qui concerne tes variables x et y, à quoi te servent-elles, puisque tu as déjà copié la valeur de code_nav et date_nav dans des prorpiétés de ton Form? et ces variables, où et comment les as-tu déclarées? quelle est leur portée? elles ne sont pas déclarées comme publiques, j'espère?

Et puis je te conseille de toujours préfixer les noms de champs par le nom d'alias, et les variables par leur identifiant m. Par exemple, navigation.code_nav permet à VFP de savoir que c'est le champ de cet alias, et m.x lui permet de savoir que ce n'est pas un champ, mais une variable mémoire.

Et si le but de toutes ces lignes de code, c'est juste de prendre la dernière ligne d'un alias et de remplacer les valeurs de 2 champs par les valeurs de 2 autres champs de la dernière ligne d'un autre ailas, eh bien ça s'écrit en 2 ou 3 lignes de code, pas besoin de tout ça.
quelque chose comme
GO BOTTOM IN
GO BOTTOM IN
REPLACE <champ1> WITH , <champ2> WITH IN "alias1"

ou bien UPDATE table1 SET champ1=alias2.champxx, champ2=alias2.champyy WHERE ta_condition

Tu essayes de réécrire ça proprement (c'est à dire le code d'ouverture des tables dans le LOAD de la form, ou bien en utilisant le DataEnvironment), et on continue ensuite.
Commenter la réponse de michelatoutfox
0
Merci
Bonjour et merci pour tes conseilles mais toujours j'ai un problème au niveau de la grille quand je clic sur la cellule text1 de la colonne1 après l'enregistrement l'evenment click ne se déclenche pas
****** La cellule Text1 de la Colonne1
****** Click evenment
*** pageframe1.reglement.Grid1.Column1.Text1
**** Click evenment
do form C:\tarification\formulaires\reglement.scx
c'est là où se trouve mon problème
Merci d'avance si tu trouve une solution.
Commenter la réponse de nizarmezzi
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
0
Merci
[list]
[*] Est-ce que tu as modifié le code de cette méthode Click et l'ouverture de tes tables comme je te le conseillais?
[*] essaie d'utiliser le click de la grille elle-même, plutot que celui de la ligne
/list
Commenter la réponse de michelatoutfox
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
0
Merci
Commenter la réponse de michelatoutfox