Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour les PB-donfeurs,
Après des mois d'inactivité sur le forum, je reviens vous demander conseil.
J'ai besoin de passer tous les taborder d'une datawindow à 0 (dans le code pour que ce soit dynamique, c'est dans un cas d'utilisation particulier) sauf une case à cocher. Je ne peux donc pas rendre la datawindow disable (ce qui aurait simplifié les choses).
Y a-t-il un moyen plus rapide que de lister tous les objets de la datwindow et de leur affecter un taborder à 0 un par un ?
Merci d'avance.
Hors ligne
Bonjour,
Quelque chose du genre :
FOR li_i = 1 TO Integer( dw_1.DESCRIBE( "DataWindow.Column.Count" )) IF dw_1.DESCRIBE( '#' + string(li_i) + '.Edit.Style' ) <> 'checkbox' THEN dw_1.Modify( '#' + string(li_i) + '.TabSequence=0' )) // ou protect=1 NEXT
Hors ligne
Si tu utilises le protect, tu as possibilité d'utiliser des expressions, ce qui permet une plus grand souplesse de gestion; par exemple
en basant la valeur du protect sur celle d'une colonne virtuelle dont tu peux contrôler la valeur à volonté.
Hors ligne
buck a écrit:
Bonjour,
Quelque chose du genre :Code: pb
FOR li_i = 1 TO Integer( dw_1.DESCRIBE( "DataWindow.Column.Count" )) IF dw_1.DESCRIBE( '#' + string(li_i) + '.Edit.Style' ) <> 'checkbox' THEN dw_1.Modify( '#' + string(li_i) + '.TabSequence=0' )) // ou protect=1 NEXT
Merci buck, mais si j'ai des checkbox en dehors de celle que je veux garder ... ?
Dernière modification par abdelta (13-03-2013 09:03:03)
Hors ligne
foon a écrit:
Si tu utilises le protect, tu as possibilité d'utiliser des expressions, ce qui permet une plus grand souplesse de gestion; par exemple
en basant la valeur du protect sur celle d'une colonne virtuelle dont tu peux contrôler la valeur à volonté.
Pas sure que ce soit plus rapide de passer sur tous les objets pour renseigner le champ protect ... je vais voir.
Hors ligne
Bonjour,
Pour ma part, dans ce cas, j'utilise plutôt la solution suggérée par foon. Un simple SetItem te permet de changer le statut de l'ensemble des colonnes en ayant mis une formule en place sur le champ protect.
Merci buck, mais si j'ai des checkbox en dehors de celle que je veux garder ... ?
Je mettrais une info dans le champ tag de la datawindow sur le checkbox concerné (ex : np non protégé) :
FOR li_i = 1 TO Integer( dw_1.DESCRIBE( "DataWindow.Column.Count" )) IF dw_1.DESCRIBE( '#' + string(li_i) + '.Edit.Style' ) <> 'checkbox' THEN dw_1.Modify( '#' + string(li_i) + '.TabSequence=0' )) // ou protect=1 ELSE IF dw_1.DESCRIBE( '#' + string(li_i) + '.tag' ) <> 'np' THEN dw_1.Modify( '#' + string(li_i) + '.TabSequence=0' )) END IF NEXT
Hors ligne
Si il y a beaucoup de colonnes (et même si ce n'est pas le cas d'ailleurs), je mettrais le describe() du nombre de colonnes en dehors de la boucle : pas la peine d'interroger à chaque tour de boucle une info qui ne change pas.
Hors ligne
Bonjour,
Je suis d'accord. Il s'agissait simplement d'illustrer une solution au libre choix de l'adapter.
Hors ligne
foon a écrit:
Si tu utilises le protect, tu as possibilité d'utiliser des expressions, ce qui permet une plus grand souplesse de gestion; par exemple
en basant la valeur du protect sur celle d'une colonne virtuelle dont tu peux contrôler la valeur à volonté.
C'est souvent ce que je fais.
1) J'ajoute une colonne numérique bidon initialisée à 0 (ex: ProtVal=0) au ResultSet de la Proc ou du Select (selon la source de données de la DataWindow).
2) Sur chacune des colonnes dont le Protect doit être pilotable, dans l'expression du Protect, il n'y a qu'à ajouter tout simplement: ProtVal
3) Dès que tu fais un SetItem à 1 de ProtVal, toutes les colonnes dont le Protect=ProtVal seront protégée
Hors ligne