Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J’ai un petit problème :
Dans ma datawindow (dw_1) j’ai une case à cocher (case1), j’ai besoin de parcourir la datawindow et rendre la case à cocher protected pour des lignes et non protected pour des autres selon des conditions
Càd
Si condition 1 sur la ligne courante est vérifiée protect (case1) = 1
La modification doit toucher uniquement la ligne concernée.
J’ai essayer avec le script ci-dessous mais sans succès
li_ro = dw_detail.rowcount(); FOR li_j = 1 TO li_ro IF dw_1.getitemstring(li_j,"case1") = 'N' THEN dw_1.modify("case1.protect = '0~tif(getrow()=currentrow(),1,0))'") END IF NEXT
Remarque je veux faire ça dynamiquement.
Cordialement
Hors ligne
La propriété case1.protect est modifiée dans une boucle, c'est la dernière modification qui l'emportera.
Il ne faut pas oublier que l'expression qui sera utilisée pour protect sera évaluée à chaque ligne de la DW.
En plus il y a une parenthèse en trop à la fin. Si on récupère le résultat du modify(), on doit voir un message d'erreur.
Mais je me demande le but de la modif : on veut protéger la case à cocher uniquement si elle vaut 'N' (j'imagine que c'est la table de valeurs avec non coché = 'N' ?). Qu'est-ce qui est voulu en fait ?
Pour traduire ça, il faut supprimer la boucle du code précédent et faire
dw_1.modify("case1.protect = '0~tif(case1='N',if(getrow()=currentrow(),1,0),0)'") //et si case1 ne vaut pas 'N' on fait quoi ?
Hors ligne
Bonjour,
as-tu essayé de mettre une fonction (avec le bouton '=' barré) pour déterminer la propriété 'Protect' de ton champs case1 ? Tu peux, avec ça, calculer la valeur d'une propriété. Une fonction du type if('condition 1 sur la ligne courante est vérifiée', 1,0 ) par exemple ?
J'ai fait le test sur un champs et ça marche. Avec une case à cocher je n'ai pas essayé mais ça doit être le même.
Hors ligne
Nn n’est pas la valeur de la case qui nous intéresse peut ètre j’ai pas bien expliqué le besoin.
Pour chaque ligne de la datawindow je dois chercher les données correspondants dans la base le problème ce que le données à cherché ne sont pas des colonnes dans la datawindow et je dois me baser sur les donner trouvées pour décider si on doit activer ou désactiver la case à cocher.
L’algorithme est quelque chose comme ça
Si X=Y alors
Protect(case1)
Si non
Case1 reste
Je peux résoudre le problème en ajoutant des colonnes dans la table mais j’ai envie de faire ça
Dernière modification par infopower (24-05-2012 13:11:43)
Hors ligne
Geo
J'ai pas compris ta proposition
Hors ligne
Si j'ai bien compris, lorsque case1 est 'N', case1 ne doit pas être modifiable (la protection de case1 dépend donc de sa valeur). Si c'est bien ça, lorsque tu vas dans les propriétés du champs case1 de ton DataWindowObjet, dans l'onglet 'General', tu as une propriété 'Protect' (avec en dessous un SingleLineEdit et un bouton avec un signe 'égal' dessus, en tout cas en PB 11). Tu cliques sur le bouton et tu entres if((case1 = 'N'), 1,0) (que tu retrouve dans ton SLE après validation). Cette fonction se traduit par : si case1 est égal à 'N' alors on protège, sinon on ne protège pas. Attention, c'est réévalué à chaque modification, donc si tu changes de 'X' à 'N', tu n'y as plus accès une fois que c'est 'N'...
Est-ce clair ?
Geo
Hors ligne
Geo a écrit:
Est-ce clair ?
Vous, c'est "François", c'est juste ?
Hors ligne
Lui, c'est pareil, c'est Juste
Hors ligne