Pas d'inquiétude, avec PBAdonf, c'est dans la poche ! ^^

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 12-03-2013 15:39:03

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

taborder à 0

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.


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#2 13-03-2013 08:16:10

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: taborder à 0

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 

Hors ligne

 

#3 13-03-2013 08:34:50

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: taborder à 0

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


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#4 13-03-2013 09:00:11

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: taborder à 0

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)


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#5 13-03-2013 09:02:37

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: taborder à 0

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.


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#6 13-03-2013 09:13:04

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: taborder à 0

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é) :

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
  ELSE
     IF  dw_1.DESCRIBE( '#' + string(li_i) + '.tag' )  <> 'np' THEN dw_1.Modify( '#' + string(li_i) + '.TabSequence=0' ))
  END IF
NEXT 

Hors ligne

 

#7 13-03-2013 10:12:45

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: taborder à 0

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.


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

 

#8 13-03-2013 11:24:34

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: taborder à 0

Bonjour,

Je suis d'accord. Il s'agissait simplement d'illustrer une solution au libre choix de l'adapter.

Hors ligne

 

#9 14-03-2013 09:29:45

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: taborder à 0

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

 

Pied de page des forums

Propulsé par FluxBB 1.2.22