Powerbuilder pour les completement Geeks !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 01-10-2015 08:47:20

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

[RESOLU] SetRedraw et Filtre

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 :

Code: pb

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

 

#2 01-10-2015 10:02:24

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] SetRedraw et Filtre

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...


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#3 01-10-2015 10:09:44

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Re: [RESOLU] SetRedraw et Filtre

Ah ui ui j'ai oublié pardon

PB 12.5  Build 5550

Hors ligne

 

#4 02-10-2015 06:53:58

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: [RESOLU] SetRedraw et Filtre

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).


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#5 02-10-2015 07:28:56

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Re: [RESOLU] SetRedraw et Filtre

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

 

#6 02-10-2015 07:39:23

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Re: [RESOLU] SetRedraw et Filtre

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

 

Pied de page des forums

Propulsé par FluxBB 1.2.22