Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous
J'ai un problème à vous soumettre, avant que je ne commence à m'arracher les cheveux...
J'ai une dw que je manipule en filtrant ou non les données. En gros, lorsque mes données sont filtrées, pour faire un traitement demandé, j'annule mon filtre, je fais mon traitement, puis je réapplique mon filtre.
Avant d'appliquer le filtre ou de l'enlever, je balance un setredraw à False. Une fois que mon traitement est fini, je le balance à true.
Seulement dans certains cas, mon setredraw est annulé par le "défiltrage de mes données".
En pratique, ça se traduit par l'apparition rapide de toutes les lignes à l'écran.
C'est extremement moche, et je ne vois pas d'explication rationnelle. Sauf qu'il doit y en avoir une, car quand je dis "dans certains cas" ce n'est pas aléatoire.
Les données affichées dans ma dw sont renseignées à partir d'une équipe. Avec certaines équipes je n'ai pas le problème, avec d'autres si.
La structure de la dw est toujours la même quelque soit les équipes, seules les données changent.
Ma dw est construite de façon dynamique, certains affichages ( type format ou couleur de fond) dépendent du filtre. Je me suis dis que le problème venait éventuellement de là, mais même en virant le filtre des conditions d'affichage, le problème se produit toujours.
Je ne veux pas utiliser la propriété Visible. Entre une dw qui disparait puis réapparait, et plein de lignes qui apparaissent puis disparaissent, c'est choisir entre du moche et du très moche.
Merci à ceux qui auraient des idées à me suggérer, personnellement je ne vois plus où chercher. Serait-ce un bug pb ?
Dernière précision, puis je clos mon roman. J'applique le truc très très bête de base :
ls_filter = '' dw_1.SetFilter(ls_filter) dw_1.setRedraw(FALSE) //en mode debug je vois bien ma dw_1 disparaitre dw_1.Filter() //en mode debug, zouuuuu ma dw_1 est réapparue !!
Merci beaucoup pour votre aide
Dernière modification par rapitou (02-10-2015 07:40:07)
Hors ligne
Salut,
rapitou a écrit:
Merci à ceux qui auraient des idées à me suggérer, personnellement je ne vois plus où chercher. Serait-ce un bug pb ?
Tu ne précises pas ta version de PB...
Hors ligne
Ah ui ui j'ai oublié pardon
PB 12.5 Build 5550
Hors ligne
Salut, quelques pistes :
Est-ce qu'il y a des événements définis sur ta dw du genre onrowfocuschanged ?
Est-ce que ta dw est basée sur datawindow ou un objet hérité ? Dans le second cas, il pourrait y avoir une surcharge de la méthode filter().
Dans tout les cas, en debuggage si tu mets un point d'arrêt sur l'appel à filter() et que tu fais un 'step in', tu devrais voir si il n'y a pas du code qui s’exécute pendant/à cause de l'appel à filter().
Au pire des cas, si tu ne trouves toujours pas et tu as la main sur la classe de ta dw, surcharge la méthode setredraw et met y un point d’arrêt quand elle reçoit true, avec un peu de bol tu pourras lire dans la callstack d'où çà vient, sinon il est possible qu'il y ait un "POST setredraw(true)" qui traîne (bien du bonheur à débugger).
Hors ligne
Il'y a pas d'héritage sur le filter(), mais en revanche, effectivement, quand je regarde le code exécuté par la commande filter() je constate qu'il passe dans l'évènement resize dans le cas moche, mais pas dans l'autre !
Je vais donc suivre cette piste et je vous dirai quoi
Merci beaucoup pour ton aide !
Dernière modification par rapitou (02-10-2015 07:29:15)
Hors ligne
J'ai trouvé !
Mon problème venait bien du resize qui se lance dans certains cas ! Et dans le resize, eh ben on s'amuse avec les setredraw !!
Donc je n'ai pas trouve la cause, mais j'ai trouvé un moyen de sortir de ce resize qui n'avait pas lieu de se lancer !
Hors ligne