Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Dans l'evenement fermer d'une fenetre je fait appel à dw.GetNextModified (0, Primary!) et qui me retourne 1 même que j'ai pas modifié dans ma datawindow d'où l'affichage d'un message de confirmation d'enregistrement de la modification.
Est ce qu'il s'agit d'un bug PowerBuilder ou quoi ?
Merci d'avance
Dernière modification par mattdamon (04-08-2010 17:11:23)
Hors ligne
tu dois avoir du code qui modifie tes données
Hors ligne
Bonjour,
Effectivement tu dois avoir un setitem quelque part.
Par contre si tu utilise cette fonction pour vérifier si une maj est nécessaire celà n'est pas la bonne méthode. Tu devrais plutot faire la chose suivante :
If dw_1.ModifiedCount() + dw_1.deletedCount() > 0 then
.............
.............
End if
( La fonction getnextmodified même si tu la demande sur le buffer delete ne prend en compte que les lignes ayant été modifiées puis supprimées par exemple )
Cdt
Yanis
Hors ligne
Yanis a écrit:
Bonjour,
Effectivement tu dois avoir un setitem quelque part.
Par contre si tu utilise cette fonction pour vérifier si une maj est nécessaire celà n'est pas la bonne méthode. Tu devrais plutot faire la chose suivante :
If dw_1.ModifiedCount() + dw_1.deletedCount() > 0 then
.............
.............
End if
( La fonction getnextmodified même si tu la demande sur le buffer delete ne prend en compte que les lignes ayant été modifiées puis supprimées par exemple )
Cdt
Yanis
D'accord, je vais chercher dans le code s'il y une modification systématique des données
Hors ligne
Le code que je t'indique ne change rien. Si le la fonction getNextModified te renvoi un numéro de ligne > 0 c'est qu'une modification est intervenue ( et il en sera de même avec mon code ) soit au clavier par l'utilisateur soit dans le code ( ex à l'ouverture de la fenêtre ) par l'utilisation de la fonction SETITEM par exemple.
Le code que je t'indique n'est qu'un complément et il est préférable à l'utilisation de getnextmodified
Cdt
Yanis
Hors ligne
Yanis a écrit:
Le code que je t'indique ne change rien. Si le la fonction getNextModified te renvoi un numéro de ligne > 0 c'est qu'une modification est intervenue ( et il en sera de même avec mon code ) soit au clavier par l'utilisateur soit dans le code ( ex à l'ouverture de la fenêtre ) par l'utilisation de la fonction SETITEM par exemple.
Le code que je t'indique n'est qu'un complément et il est préférable à l'utilisation de getnextmodified
Cdt
Yanis
Justement, je crois que le problème n'est pas dù à l'utilisation de getbextmodified ou ton code mais à la modification systématique des données .
A titre indicatif, le message informatif se déclenche si :
(dw.DeletedCount () + dw.GetNextModified (0, Primary!) + dw.GetNextModified (0, Filter!)) > 0
Je suis en train de voir dans mon code et surtout dans les ancestres des fenetres s'il y a des setitem ou modify...
Hors ligne
Y a t'il un moyen en PWB pour savoir quel est la colonne dans une datawindow a été changée au cours de traitement ?
Hors ligne
une fois que tu sais quelle ligne a été modifie, tu peux boucler sur les colonnes avec GetItemStatus
ps : nombre de colonnes avec .Describe("DataWindow.Column.Count")
Hors ligne
utilise tu le framework de sybase ( Powerbuilder Foundation Class)
Car si c'est le cas il existe un service te permettant de visualiser dans une fenêtre spécifique au framework le status des lignes , des colonnes etc... de n'importe quelle datawindow
Hors ligne
Yanis a écrit:
utilise tu le framework de sybase ( Powerbuilder Foundation Class)
Car si c'est le cas il existe un service te permettant de visualiser dans une fenêtre spécifique au framework le status des lignes , des colonnes etc... de n'importe quelle datawindow
Non on utilise pas le PFC.
shahin a écrit:
une fois que tu sais quelle ligne a été modifie, tu peux boucler sur les colonnes avec GetItemStatus
ps : nombre de colonnes avec .Describe("DataWindow.Column.Count")
Effectivement, je dois boucler sur toutes les colonnes pour savoir la quelle a été modifiée (que ce soit datamodified ou newmodified).
A+
Hors ligne
Merci à tous pour ces informations.
En fait, j'ai trouvé dans mon code que le système fait un setitem dans une colonne et pércissement dans l'event avant_saisie_ligne, donc pour corriger ce problème j'ai fait comme suit :
This.SetItemStatus(num_ligne, "colonne", Primary!, NotModified!)
Hors ligne