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





Bonsoir,
Je rencontre des difficultés à comprendre le fonctionnement de mes datawindows lorsque je scroll avec ma souris (la molette vers le haut ou vers le bas).
Mes datawindows sont en fait des rapports affichant des données/statitiques. Chacune d'entre elle se trouve dans une sheet indépendante.
J'utilise Pb 10.2.0 build 8075
D'une datawindow à l'autre, le comportement varie complètement. Ca m'ennuie dans la mesure où mon application sera utilisée en faible résolution (800x600) et que le contenu de la fenêtre n'est pas visible complètement : on voit la partie haute, puis il faut aller chercher la partie en dessous avec un ascenseur ou un scroll de molette de souris (Genre ma page est de taille 800x900). Mais voilà, l'ascenseur a tendance à aller chercher directement la page suivante au lieu de descendre sur la page en cours : je me rabats donc sur le scroll de molette de souris.
- Sur l'une (1), le scroll de souris va me permettre de monter/descendre sur la page en cours, sans passer à la page suivante.
- Sur une autre (2), ça va immédiatement passer à la page suivante, sans descendre en bas de ma page courante pour visualiser la partie du bas...
- Sur une autre (3), ça va descendre en bas de ma page courante, et si je continue à scroller alors ça va passer à la page suivante.
Dans le cas (1), tout est affiché dans la bande "Detail" de ma datawindow. J'affiche des données personnelles des utilisateurs telle que l'adresse, le téléphone, etc.
Dans le cas (2), en plus d'afficher les données personnelles, je vais aussi lister les produits qu'ils ont déjà acheté. Ma procédure stockée me retourne tout en vrac, et je fais un GROUP côté Pb. J'ai les données personnelles dans la bande "Header group" et j'affiche la liste des produits dans la bande "Detail"
Dans le cas (3), je modifie le (2). Dans ma bande "Detail" je décide de faire appel à un nested report. J'ai donc maintenant 2 procédures stockées : la première me renvoie les données personnelles, et pour chaque row retourné j'ai mon nested report qui va aller chercher la liste des produits. Hormis le problème de performance (pour 100 000 utilisateurs je me retrouve avec 100 000 requêtes Oracle supplémentaires) je constate que tout fonctionne comme je le souhaite.
Je ne comprends pas ces différences au niveau de la gestion du scroll de molette de souris.
Il semblerait que la bande "Detail" soit au coeur de ce mystère !
Y comprenez-vous quelque chose ?
Je vous remercie d'éclairer ma lanterne :-)
Dernière modification par Nyphel (25-06-2008 14:23:48)
Hors ligne
je veux bien voir une image de tes ecrans...

Hors ligne





Je ne peux pas vraiment uploader d'images : les ports FTP sont bloqués et des informations confidentielles sont affichées sur mes rapports (Nom de sociétés, N° de tel, etc.).
Désolé :-/
Hors ligne
rien ne t'empeche de brouiller ces infos via paint...

Hors ligne





(1) Datawindow n° 1
LOGO - Coordonnées de la société
//--------------------------------------------------
// HEADER
//--------------------------------------------------
//--------------------------------------------------
// 1 : HEADER GROUP
//--------------------------------------------------
DONNEES de l'utilisateur :
- Nom
- Prénom
- Adresse
- Téléphone
- ...
Formule de politesse et signature
//--------------------------------------------------
// DETAIL
//--------------------------------------------------
//--------------------------------------------------
// 1 : TRAILER GROUP
//--------------------------------------------------
//--------------------------------------------------
// SUMMARY
//--------------------------------------------------
//--------------------------------------------------
// FOOTER
//--------------------------------------------------
Donc dans cette datawindow ma procédure stockée me retourne un seul row par utilisateur.
Pour chaque row j'ai une page.
Ce rapport représente un courrier.
Le scroll de souris va me permettre de monter/descendre sur la page en cours, sans passer à la page suivante.
J'aimerais passer à la page suivante quand j'arrive au bas de la page en cours.
Dernière modification par Nyphel (25-06-2008 09:03:02)
Hors ligne





(2) Datawindow n° 2
LOGO - Coordonnées de la société
//--------------------------------------------------
// HEADER
//--------------------------------------------------
DONNEES de l'utilisateur :
- Nom
- Prénom
- Adresse
- Téléphone
- ...
Produit Date dernier achat
_________________________________________
//--------------------------------------------------
// 1 : HEADER GROUP sur l'account_num (Primary key)
//--------------------------------------------------
nom_produit date_dernier_achat
//--------------------------------------------------
// DETAIL
//--------------------------------------------------
Formule de politesse et signature
//--------------------------------------------------
// 1 : TRAILER GROUP sur l'account_num (Primary key)
//--------------------------------------------------
//--------------------------------------------------
// SUMMARY
//--------------------------------------------------
//--------------------------------------------------
// FOOTER
//--------------------------------------------------
Donc dans cette datawindow ma procédure stockée me retourne N row par utilisateur.
Avec le GROUP je peux réunifier tous les rows de l'utilisateur courant de sorte à afficher la liste des produits le concernant (1 produit = 1 row).
Pour chaque utilisateur j'ai une ou plusieurs pages, suivant la longueur de la liste de produits.
Ce rapport représente un courrier.
Le scroll de souris va me permettre de passer à la page suivante, mais sans pouvoir monter/descendre sur la page en cours.
J'aimerais passer à la page suivante quand j'arrive au bas de la page en cours.
Qui plus est des fois j'obtiens des affichages bizarres à force de scroller : le bas de la liste apparait en haut de la page.
Dernière modification par Nyphel (25-06-2008 09:03:23)
Hors ligne





(3) Datawindow n° 3
//--------------------------------------------------
// HEADER
//--------------------------------------------------
LOGO - Coordonnées de la société
DONNEES de l'utilisateur :
- Nom
- Prénom
- Adresse
- Téléphone
- ...
//--------------------------------------------------
// 1 : HEADER GROUP sur l'account_num (Primary key)
//--------------------------------------------------
Report control
-> affiche la liste des produits pour l'utilisateur courant.
-> seconde procédure stockée.
//--------------------------------------------------
// DETAIL
//--------------------------------------------------
Formule de politesse et signature
//--------------------------------------------------
// 1 : TRAILER GROUP sur l'account_num (Primary key)
//--------------------------------------------------
//--------------------------------------------------
// SUMMARY
//--------------------------------------------------
//--------------------------------------------------
// FOOTER
//--------------------------------------------------
Donc dans cette datawindow ma procédure stockée me retourne un seul row par utilisateur.
La GROUP est à priori inutile, m'enfin bon...
Pour chaque utilisateur j'ai une ou plusieurs pages, suivant la longueur de la liste de produits.
Ce rapport représente un courrier.
Le scroll de souris fonctionne parfaitement. Il monte/descend sur la page en cours, et passe à la page suivant lorsqu'on atteind le bas de la page courante.
Problème : Quand je retourne 10000 utilisateurs de la base de données, je fais alors appel à 10000 requêtes supplémentaires (1 par utilisateur, pour lister ses produits).
Le temps de travail est alors beaucoup trop important, et je ne peux pas me satisfaire de cette solution avec un nested report.
Dernière modification par Nyphel (25-06-2008 09:03:40)
Hors ligne





Il semblerait en fait qu'on ne puisse scroller avec la souris que lorsqu'on a le pointeur au-dessus d'une bande DETAIL.
Dès lors j'ai l'impression de ne pas pouvoir scroller dans le cas (2) car ma bande DETAIL est tout petite, et même trop basse: en 800x600 on ne peut pas la voir sans descendre dans la fenêtre :-/
Je ne vois pas de solution pour y remédier... Et vous ?
Hors ligne
Les informations que tu affiches sont elles modifiables directement via ces 3 datawindows (a priori non).
Si tu souhaites afficher juste le résultat à l'utilisateur, je te conseille fortement de passer en Print.Preview = Yes pour que la datawindow s'affiche comme une page en aperçu avant impression.
DW.Object.DataWindow.Print.Preview='Yes'
L'utilisateur pourra scroller comme sur un aperçu avant impression sans avoir un mini détail quasi illisible qui défile et une grosse partie fixe avant et après le détail...
Hors ligne





En effet le contenu de mes datawindow n'est pas modifiable, et est sujet à impression.
C'est une idée qui me semble tout à fait intéressante, je vais tester cela pour voir si le rendu est homogène avec le reste de mes rapports.
Merci !
[EDIT]
Je suis reparti de ma datawindow n°2 (car c'est la solution qui m'intéresse le plus) et j'ai ajouté la demande de passage en print preview dans l'event ue_open().
Cela semble bien fonctionner !
Je te remercie pour cette bonne idée
Dernière modification par Nyphel (25-06-2008 14:13:24)
Hors ligne