Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour.
J'ai une datastore avec 3 colonnes me permettant d'ajouter des objets en base de donnée.
Je peux rendre les colonnes éditables ou non dans PB en utilisant une petite ruse : si le tabsequence est le même dans le edit source sur plusieurs colonnes, alors, le Focus ne peut pas se faire. Il est donc impossible de modifier l'élément. Si je met des tabsequence différents, alors la colonne est bien editable.
Ce que je voudrais faire est un peu plus complexe, je voudrais que sur les lignes en cours de création (grâce à un bouton nouveau un ligne est ajoutée avec tous les éléments à vide) on puisse insérer les données. Ca c'est bon si les 3 tabsequences sont différents.
Par contre, une fois la donnée créée, il ne doit être possible de ne modifier que la seconde colonne.
La première ne doit plus être pas editable après enregistrement.
Sauf que je n'arrive à rendre que toutes les lignes d'une colonne editables ou alors aucunes...
Quelqu'un aurait une idée pour m'aider?
par avance, merci.
Dernière modification par FMI (09-06-2014 07:48:46)
Hors ligne
Pourquoi jouer avec les tabsequence ?
Tu as dans les contrôles des datawindow une propriété Protect sur laquelle tu peux en plus mettre des conditions genre if (nouvelle_ligne = true,0,1)
Je n'ai pas PB sous la main là donc je ne sais pas si tu peux utiliser le getitemstatus ou équivalent mais au pire tu peux utiliser une colonne "dummy" que tu positionne à 0 pour les nouvelles lignes et à 1 une fois l'update fait et tu conditionnes ton protect sur le "dummy"
Hors ligne
Salut,
On peut dans la propriété PROTECT sur ta première colonne mettre la condition suivante :
If( isrowNew() = 0 , 1 )
Cdt
Yanis
Hors ligne
Je vais tenter ça. Merci de votre aide.
Hors ligne
Les gars, merci, impeccable, ça fonctionne super bien. En fait j'ai utilisé votre technique dans le constructeur en 2 lignes. Une pour la propriété protect, une pour la coloration du champ.
this.Modify("MonChamp.Protect='1~tIf(IsRowNew(),1,0)'")
this.Object.MonChamp.BackGround.Mode = '1~tif (IsRowNew(), 1, 0 )'
Hors ligne
Salut,
Pourquoi le fait tu par script au lieu de le mettre dans la datawindow directement ? ( tu as un petit icone à droite de la propriété protect dans lequel tu peut mettre ton expression conditionelle )
Cdt
Yanis
Hors ligne
Je ne vois pas de propriété Protect sur ma DataWindow. J'ai regardé dans tous les onglets, je ne vois rien de tel.
Je suis en PB 10.5, peut être que c'est lié.
Hors ligne
Salut,
Dans ta datawindow tu sélectionne ta colonne de data ( en général celle que tu as mis dans la zone détail ) et dans l'onglet "GENERAL" de tes propriétés tu trouve la propriété "PROTECT"
Cdt
Yanis
Hors ligne
Yes c'est ok, j'ai trouvé, merci de ton aide.
Hors ligne
Pages: 1