Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

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 08-10-2007 09:53:17

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Lignes updatables et lignes protégées dans une même DW

J'ai parcouru les 6 pages de la partie DataWindow et n'ai pas trouvé de sujet traitant ma requête.. Donc, je pose ma question ici.

J'ai une Datawindow qui peut avoir des lignes saisissables ou lecture seulement (les colonnes saisissables ont été protégée via le Protect)

La propriété Protect, fonctionne très bien.

Le focus est sur la première zone saisissable d'une ligne non protégée.

Seulement, quand je "navigue" dans la DW, en passant d'une ligne à l'autre (avec la souris ou les touches UP DOWN), si j'arrive sur une ligne entièrement protégée, le focus va se mettre sur la première colonne non protégée de  la première ligne non protégée qui suivra.

Par exemple, mes 2 premières lignes ne sont pas protégées.
Les lignes 3, 4 , 5 et 6 sont protégées.
La ligne 7 n'est pas protégée.

Mon curseur se trouve dans la première colonne saisissable de ma ligne 2.
Si j'appuis sur la touche 'flêche bas', la ligne 7 sera sélectionnée avec le curseur sur sa première colonne au lieu de passer sur la ligne 3..
Et si ensuite, je prends la souris et que je clique sur la ligne 5, cette ligne sera sélectionnée, mais le focus restera sur la première colonne de la ligne 7. Le currentrow sera toujours la ligne 7.

Etrange.. Je ne pige pas.

Pourtant, ici, http://infocenter.sybase.com/help/index … IDCDJB.htm
il est dit, si je comprends bien, que si l'on passe d'une ligne updatable à une ligne donc les colonnes sont protéfée, la DW passe automatiquement en mode lecture seule.. Donc, en passant de la ligne 2 (saisissable) à la ligne 3 (lecture), ma ligne devrait être sélectionnée, sans avoir de focus, et le currentrow devrait être égal à 3.

Si ma DW est entièrement en lecture seule (aucune ligne ne contient de colonnes saisissables), là pas de soucis, je passe d'une ligne à l'autre et mon rowfocuschanged ramène bien la bonne valeur pour "currentrow"


J'ai tenté de comprendre via le débugger de PB. A un moment, il a bien la bonne ligne sélectionnée (une des lignes en lecture seule), puis, d'un coup, il récupère la première ligne updatable.. Mais ça se fait d'un événement à l'autre, et je ne vois pas comment il fait..

J'ai tenté de forcer enfaisant un ScrollToRow avec le numéro de la ligne sélectinnée dans l'événement clicked, il sélectionne bien la ligne choisie, mais le focus reste toujours sur la première ligne updatable qui suit..

Si quelqu'un à une idée. Qu'aurais-je oublié ?

J'espère ne pas voir été trop brouillon dans mon explication..

Merci
Kalini

Dernière modification par Kalini (08-10-2007 10:02:09)

Hors ligne

 

#2 08-10-2007 10:08:09

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: Lignes updatables et lignes protégées dans une même DW

Kalini a écrit:

Pourtant, ici, http://infocenter.sybase.com/help/index … IDCDJB.htm
il est dit, si je comprends bien, que si l'on passe d'une ligne updatable à une ligne donc les colonnes sont protéfée, la DW passe automatiquement en mode lecture seule.. Donc, en passant de la ligne 2 (saisissable) à la ligne 3 (lecture), ma ligne devrait être sélectionnée, sans avoir de focus, et le currentrow devrait être égal à 3.

Je ne pense pas:
"If, however, focus is on an editable column in an updatable DataWindow (a DataWindow that has one or more editable columns), the row focus events do not fire when you click on a protected column or on a column whose tab order is 0. The focus remains on the current, editable column. "


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

Hors ligne

 

#3 08-10-2007 10:18:31

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Lignes updatables et lignes protégées dans une même DW

Ah oui, exact.. En fait c'est la ligne suivante qui m'a fait croire que c'était possible :

"the DataWindow switches to read-only mode" : La DW peut basculer en mode lecture seule. (Et dans le cas une DW n'a que des lignes en lecture seule,  tout se passe bien)

C'est quand même bizarre que ça ne fonctionne pas... Si on peut protéger les colonnes, il y a forcément un cas où l'on obtient une ligne entièrement protégée. Je suis surpris que la DW perd un peu les pédales.. La à priori, ma DW ne passe pas en lecture seule

Dernière modification par Kalini (08-10-2007 10:19:34)

Hors ligne

 

#4 08-10-2007 10:24:29

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: Lignes updatables et lignes protégées dans une même DW

Ce fonctionnement est normal car ta datawindow ne passera en lecture seule que si tous tes champs sur toutes tes lignes sont à "protect=1".
Hors, il te reste au moins un champ sur une ligne qui est modifiable, donc la datawindow reste à l'état "Updatable".


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

Hors ligne

 

#5 08-10-2007 10:33:16

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Lignes updatables et lignes protégées dans une même DW

foon a écrit:

Ce fonctionnement est normal car ta datawindow ne passera en lecture seule que si tous tes champs sur toutes tes lignes sont à "protect=1".
Hors, il te reste au moins un champ sur une ligne qui est modifiable, donc la datawindow reste à l'état "Updatable".

OK.
Donc, pas de solution alors ?
Ce qui est pénible, c'est que mes entêtes de colonnes sont modifiées en fonction des lignes. Quand je clique sur une ligne protégée entièrement,
Mes entêtes de colonnes vont prendre les valeurs correspondantes à la première ligne updatable qui suivra.. Donc, je n'ai jamais les bonnes entêtes pour les lignes non modifiables..

Dernière modification par Kalini (08-10-2007 10:36:25)

Hors ligne

 

#6 08-10-2007 12:19:23

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: Lignes updatables et lignes protégées dans une même DW

Si ton problème est d'empêcher un utilisateur de modifier les valeurs mais que tu souhaites qu'il puisse mettre le focus quand même sur le champ, utilises alors la propriété "display only" de la colonne. Elle permet d'empêcher la modification, mais autorise le focus et donc la sélection...


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#7 08-10-2007 12:31:25

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: Lignes updatables et lignes protégées dans une même DW

Sinon, testes la valeur de l'expression GetSelectedRow(0) , et non celle de GetRow() pour déterminer quelle ligne est sélectionnée
au moment de changer tes entêtes de colonnes...
Attention, ce sera la première ligne sélectionnée dans ta datawindow qui sera retournée (Pas de solution en multi-sélection), et en aucun cas la ligne courante.


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

Hors ligne

 

#8 08-10-2007 12:35:54

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Lignes updatables et lignes protégées dans une même DW

Chrnico a écrit:

Si ton problème est d'empêcher un utilisateur de modifier les valeurs mais que tu souhaites qu'il puisse mettre le focus quand même sur le champ, utilises alors la propriété "display only" de la colonne. Elle permet d'empêcher la modification, mais autorise le focus et donc la sélection...

Merci pour ta réponse Chrnico.

Le problème est que l'on coche cette option pour une colonne entière, donc sur toutes les lignes..
Or moi, sur certaines lignes, la zone doit être modifiable alors que sur d'autres lignes, cette même zone n'est pas modifiable.

Je ne vois pas la possibilité de paramétrer cette propriété "Display Only" comme on peut le faire pour la propriété "Visible" ou "Pretect"

Dernière modification par Kalini (08-10-2007 12:36:35)

Hors ligne

 

#9 08-10-2007 12:37:38

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Lignes updatables et lignes protégées dans une même DW

foon a écrit:

Sinon, testes la valeur de l'expression GetSelectedRow(0) , et non celle de GetRow() pour déterminer quelle ligne est sélectionnée
au moment de changer tes entêtes de colonnes...
Attention, ce sera la première ligne sélectionnée dans ta datawindow qui sera retournée (Pas de solution en multi-sélection), et en aucun cas la ligne courante.

Je vais tester mais ça ne changera en rien le fait que quand je clique sur une ligne protégée, mon curseur se trouvera sur la prochaine ligne udaptable ?

Dernière modification par Kalini (08-10-2007 12:42:55)

Hors ligne

 

#10 08-10-2007 12:51:11

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Lignes updatables et lignes protégées dans une même DW

Kalini a écrit:

foon a écrit:

Sinon, testes la valeur de l'expression GetSelectedRow(0) , et non celle de GetRow() pour déterminer quelle ligne est sélectionnée
au moment de changer tes entêtes de colonnes...
Attention, ce sera la première ligne sélectionnée dans ta datawindow qui sera retournée (Pas de solution en multi-sélection), et en aucun cas la ligne courante.

Je vais tester mais ça ne changera en rien le fait que quand je clique sur une ligne protégée, mon curseur se trouvera sur la prochaine ligne udaptable ?

C'est hallucinant !!
Si je clique sur la ligne 7 (entièrement protégée), lors de l'événement clicked, le GetSelectedRow(0) me ramène la ligne 8 et mon focus se trouve sur la première colonne de cette ligne 8.
Si ensuite, je reclique sur la ligne 7, là, c'est bien la ligne 7 qui est sélectionnée et le GetSelectedRow(0) me ramène bien 7, mais mon focus se trouve toujours sur la première colonne de la ligne 8.. C'est pas beau et perturbant cet affichage

Hors ligne

 

#11 08-10-2007 12:59:51

Anpi  
Membre Geek
Date d'inscription: 22-04-2007
Messages: 59
Pépites: 3,000
Banque: 9,223,372,036,854,776,000

Re: Lignes updatables et lignes protégées dans une même DW

Bonjour,

voici une solution efficace mais pas très jolie :

- Rajout d'une nouvelle colonne appelée "selection" dans la requête SQL de la dw . Exemple : SELECT A, B, C, "     " as "selection" FROM TOTO WHERE ...
- Rajout d'une colonne supplémentaire de type string ( faut être iso avec ce qu'on a mis dans le sql ... ) dans le column spécification de la dw
- On rajoute la colonne dans la liste avec un tab order à 1 (il faut que cela soit la 1ère colonne sélectionnable )  .
- On réduit la colonne le plus possible

La colonne va désormais permettre de sélectionner les lignes qui ne l'étaient pas.

PS : Ne pas oublier de mettre des "This.SetItemStatus(currentrow, "selection", Primary!, NotModified!)" un peu partout dans tes scripts pour éviter que cette colonne perturbe les statuts.

C'est pas super clair mais j'ai pas bcp de temps...

Anpi

Dernière modification par Anpi (08-10-2007 13:21:15)

Hors ligne

 

#12 08-10-2007 13:02:45

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: Lignes updatables et lignes protégées dans une même DW

Kalini a écrit:

C'est hallucinant !!
Si je clique sur la ligne 7 (entièrement protégée), lors de l'événement clicked, le GetSelectedRow(0) me ramène la ligne 8 et mon focus se trouve sur la première colonne de cette ligne 8.
Si ensuite, je reclique sur la ligne 7, là, c'est bien la ligne 7 qui est sélectionnée et le GetSelectedRow(0) me ramène bien 7, mais mon focus se trouve toujours sur la première colonne de la ligne 8.. C'est pas beau et perturbant cet affichage

Normal: le SelectRow est effectué après l'événement "Clicked".
Pour ce qui est du focus, il n'y a pas de solution pour contourner le problème, à moins d'ajouter un champ toujours sélectionnable dans ta datawindow; mais, dans ce cas, l'utilisateur risque d'être surpris car il devra tabuler une fois de plus par ligne.

[EDIT]
Désolé Anpi, je n'avais pas vu ta réponse. Ca correspond effectivement à ce que je dis juste au-dessus (mais ta réponse est plus détaillée)


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

Hors ligne

 

#13 08-10-2007 13:16:04

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Lignes updatables et lignes protégées dans une même DW

OK, merci à vous 2.
Je vais partir sur votre solution.

Pour la Tabulation, je pense que ça ne posera pas de soucis..Disons que je préfère n'avoir que ce "petit" problème que l'autre..
Je vous tiens au courant..
Merci encore

Hors ligne

 

#14 08-10-2007 13:20:42

Anpi  
Membre Geek
Date d'inscription: 22-04-2007
Messages: 59
Pépites: 3,000
Banque: 9,223,372,036,854,776,000

Re: Lignes updatables et lignes protégées dans une même DW

foon a écrit:

[EDIT]
Désolé Anpi, je n'avais pas vu ta réponse. Ca correspond effectivement à ce que je dis juste au-dessus (mais ta réponse est plus détaillée)

Pas de soucis

Hors ligne

 

#15 09-10-2007 08:01:57

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Lignes updatables et lignes protégées dans une même DW

Bonjour à tous.
Alors, votre solution me donne satisfaction. ça marche beaucoup mieux. Merci beaucoup.
Pour la colonne "sélection" ajoutée, je l'ai même mise en Display Only, et ainsi impossible de la modifier. Pas besoin de gérer le Status de la colonne ou de la ligne.

Il y a juste un truc qui bugge un peu, c'est si mon focus se trouve sur une colonne updatable d'une ligne updatable (exemple: ligne 2), si je clique sur une ligne protégée entièrement (exemple: ligne 5), ça sera la ligne qui suivra cette ligne protégée (qu'elle soit modifiable ou non) (ligne 6) qui sera sélectionnée...
Ce n'est pas méchant, il suffira de recliquer sur la bonne ligne (ligne 5) et ça rentrera dans l'ordre.

Alors que si je suis sur une colonne protégée d'une ligne updatable ou non, si je clique sur une ligne entièrement protégée, ça sera la bonne qui sera sélectionnée.

Donc il décale d'une ligne dans un cas..

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22