Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour à tous,
J'ai un petit souci qui est à n'en pas douter assez peu compliqué, mais auquel je ne trouve pas de remède immédiat. Je m'explique.
J'ai une datawindow avec beaucoup de lignes : l’ascenseur vertical apparait. Si je vais jusqu'en bas de ma liste et que je modifie un item, je suis systématiquement repositionné sur la première ligne de ma liste. Or, un tel comportement est vite problématique. Par exemple, sur chacune de mes lignes, j'affiche une case à cocher pour gérer la suppression. Donc si je veux supprimer les 5 dernieres lignes de ma liste, je dois cocher une case, puis je suis repositionné en haut de la liste, je redescends, je coche une case, je suis repositionné en haut de la liste, je redescends, je coche une cas,... etc.
Pourtant, je ne vois rien dans mon évènement itemchanged qui pourrait causer ça... Encore une fois, il s'agit peut être d'un truc tout bête, il n'empêche que je serais ravi si quelqu'un pouvait me fournir quelques éléments de réponse sur ce comportement ?
Merci pour votre aide
Powerbuilder 10.5.1
Dernière modification par Kyoshiro (14-08-2012 09:19:37)
Hors ligne
Salut, il y a quoi dans ton itemchanged?
Hors ligne
Dans le itemchanged, il n'y a quasiment rien mis à part un contrôle sur les données... Par contre, dans le itemchanged de son ancêtre, je fais appel à une fonction, dans laquelle je trouve la ligne suivante : dw_liste.GroupCalc().
Apparemment, c'est après cette ligne que mon curseur est repositionné au début de ma liste. J'ai regardé la doc de PB10.5 et cette fonction est décrite comme "Recalculates the breaks in the grouping levels in a DataWindow." Je comprends donc bien que cela sert à recalculer les montants des groupes en cas de modification. Je ne peux donc pas m'en passer.
Y a t'il un moyen de me repositionner sur ma ligne aprés le GroupCalc() ?
J'ai essayé SelectRow() mais ça ne fait que sélectionner (mettre en surbrillance) ma ligne : je reste en haut de la liste alors que ma ligne est tout en bas de la liste.
Hors ligne
Bonjour, essaye avec setrow et/ou scrolltorow
Hors ligne
je te propose de surcharger comme suit ton groupcalc() au niveau de l'ancetre :
int ret long row row = getRowIDFromRow( getRow() ) ret=super::groupcalc() setRow( GetRowFromRowID( row ) ScrollToRow( row ) return ret
j'ai pas testé, mais l'idée est là
Hors ligne
Je viens de tester et ça marche.
J'ai également conditionné l'appel à la fonction GroupCalc(). Si je coche une case, il n'y a rien à recalculer donc si mon itemchanged concerne ma case (dwo.Name="bl_select"), je ne lance pas le GroupCalc(), sinon je lance le GroupCalc() avec le SetRow() + le ScrollToRow().
C'est parfait, merci pour votre aide !
Hors ligne
Pages: 1