Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
après avoir parcouru le forum sur des sujets "semblables" au mien, je n'ai pas trouvé de réponses répondant à mon besoin.
Alors, voici mon problème :
j'ai besoin de définir une DW contenant plusieurs colonnes, dont certaines ne seront saisissables que sous certaines conditions : valeur saisie dans une autre colonne ou bien (in)existance de certaines valeurs en BDD.
Le propriété Protect (ou gestion des tabsequence à 0) permet de protéger des colonnes, mais dans ce cas, la protection s'applique à TOUTES les lignes de la DW.
Hors mon besoin est de ne bloquer que certaines cellules ==> pour certaines lignes dans certaines colonnes...
Pour le moment, on a codé dans l'ItemChanged de la DW des contrôles qui affichent un message à l'utilisateur dans les cas où il saisis des infos qui n'ont pas lieu d'être (cas expliqué ci-dessus), mais ça ne fait pas très "propre"...
Alors, si l'un ou l'une d'entre vous a une idée ou a déjà mis en pratique ce genre de chose, je serai volontier preneur
Merci d'avance,
Bernard
Hors ligne
Bonjour,
Il faut que tu gères la propriété "protect" via une expression qui testera, par exemple, la valeur d'un autre champ.
Exemple à mettre au niveau de la propriété "protect" d'un champ:
(if s_valeur = 'OK', 0, 1)
Hors ligne
Merci, mais est-ce que l'on peut préciser quelque chose comme :
(if This.col1[row] = 'OK', 0, 1)
ou bien encore :
(if EXECUTE "select 1 from table where table.key = This.col1[row]" = 'OK', 0, 1)
Merci...
Bernard
Hors ligne
Non,
Attention, j'ai bien précisé que c'est à coder au niveau de la propriété "protect" de ta colonne (col2).
Ceci signifie que le test se fera ligne à ligne:
( if col1 = 'OK', 1, 0)
signifie que, pour chaque ligne, il va tester la valeur de la colonne col1 et donc modifier le protect de la colonne col2.
Si tu désires que le champ col2 de la ligne 1 soit protégé quand le champ col1 de la linge 1 est à 'OK', ma solution marche
Si, par contre, il faut que le champ col2 de la ligne 1 soit protégé quand le champ col1 de la linge 3 est à 'OK', ça ne marchera pas
Hors ligne
Complément.
Si tu veux tester la valeur de la colonne elle même pour la protéger ou non utilises : if(Gettext()='Ok',1,0)
Si tu veux tester la valeur de la colonne de la ligne précédente : if(GetRow()>1, if(col[-1]='Ok',1,0), 0)
cela fonctionne avec un incrément positif également : if(GetRow()<RowCount(), if(col[+1]='Ok',1,0), 0)
Hors ligne
Enfin, si tu veux modifier ton protect dans le code (parce que les conditions changent ou autres) et que tu veux rester sur du protect conditionné, tu peux le faire comme ceci :
dw_1.object.col3.protect="0~tif(col1 = 'OK' and col2 <> 'N' , 0, 1 )"
Dernière modification par hellkinder (12-11-2007 14:03:12)
Hors ligne