PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Table Multi-sélection / Anomalie..
Table Multi-sélection / Anomalie..
Débuté par andre.escallier, 14 nov. 2006 07:17 - 3 réponses
Posté le 14 novembre 2006 - 07:17
Bonjour,

Dans une fenêtre j’ai créé une table multi-sélection reliée à un fichier, ainsi qu’un bouton permettant la suppression des lignes sélectionnées.
Tout fonctionne parfaitement, à l’exception d’un cas bien précis, lorsque le nombre de lignes remplissant la table est supérieur au nombre de lignes affichées ( donc visibles ) de celle-ci :

Exemple de manip. n° 1 :
Si je sélectionne une ou plusieurs lignes parmi celles visibles de la table, ( sans déplacement de l’ascenseur ) , puis Click sur bouton de suppression, tout est OK, la suppression des lignes sélectionnées est effectuée.

Exemple de manip. n° 2 :
Si je sélectionne la « presque ou totalité » des lignes de la table suivant la méthode ci-après, soit :
1- Sélection de la première ligne de la table avec la souris
2- Déplacement avec l’ascenseur sur la dernière ligne de la table ( Cela a pour effet de rendre invisibles les lignes affichées dans la partie supérieure de la table ) , et l’ascenseur est positionné au bas de sa « glissière » )
3- Appui sur touche « MAJ » Sélection de la dernière ligne de la table avec la souris
( toutes les lignes de la table sont alors sélectionnées )
4 – Click sur Bouton de suppression  Résultat : Rien ne se passe !

Exemple de manip. n° 3
Suivant le même processus utilisé dans l’exemple n° 2, mais en sélectionnant d’abord la dernière ligne de la table, puis la première, ce qui a pour effet de positionner l’ascenseur sur la partie haute de sa « glissière », alors la suppression est parfaitement effectuée lors du click sur Bouton de suppression.

Quelqu’un a-t-il eu le même problème ? ( J’utilise WD 9.00 )

Merci d’avance pour vos réponses……….

Voici CI-DESSOUS, pour compréhension, le code sur évènement « Click » du bouton DE SUPPRESSION DES LIGNES
( Les lignes « INFOS » sont rajoutées uniquement pour aide au débuggage et contrôle visuel lors du processus de suppression. )

SI OuiNon("Voulez-vous vraiment supprimer la (les) ligne(s) sélectionnée(s) ?") ALORS

nb_lignes_selectionnees = TableSelectOccurrence(Table_ORDRES_FABRICATION)
nb_lignes_a_supprimer = nb_lignes_selectionnees

//info(" Nombre de lignes à supprimer = " nb_lignes_a_supprimer)

SI nb_lignes_a_supprimer > 0 ALORS

TANTQUE nb_lignes_a_supprimer > 0
indice_flag_selection = TableSelect(Table_ORDRES_FABRICATION,1)
//Info(" le nombre de lignes sélectionnées dans la table est : " nb_lignes_a_supprimer CR " L'indice de la ligne à supprimer [ ] est : " indice_flag_selection)

//Info("ON VA SUPPRIMER LA LIGNE D' INDICE N° " indice_flag_selection)
TableSupprime(Table_ORDRES_FABRICATION,indice_flag_selection)
FIN
nb_lignes_a_supprimer = nb_lignes_a_supprimer - 1
FIN
FIN
Posté le 14 novembre 2006 - 09:15
André a présenté l'énoncé suivant :
Bonjour,

Dans une fenêtre j’ai créé une table multi-sélection reliée à un fichier,
ainsi qu’un bouton permettant la suppression des lignes sélectionnées. Tout
fonctionne parfaitement, à l’exception d’un cas bien précis, lorsque le
nombre de lignes remplissant la table est supérieur au nombre de lignes
affichées ( donc visibles ) de celle-ci :

Exemple de manip. n° 1 :
Si je sélectionne une ou plusieurs lignes parmi celles visibles de la table,
( sans déplacement de l’ascenseur ) , puis Click sur bouton de suppression,
tout est OK, la suppression des lignes sélectionnées est effectuée.

Exemple de manip. n° 2 :
Si je sélectionne la « presque ou totalité » des lignes de la table suivant
la méthode ci-après, soit : 1- Sélection de la première ligne de la table
avec la souris 2- Déplacement avec l’ascenseur sur la dernière ligne de la
table ( Cela a pour effet de rendre invisibles les lignes affichées dans la
partie supérieure de la table ) , et l’ascenseur est positionné au bas de sa
« glissière » ) 3- Appui sur touche « MAJ » Sélection de la dernière ligne
de la table avec la souris ( toutes les lignes de la table sont alors
sélectionnées ) 4 – Click sur Bouton de suppression  Résultat : Rien
ne se passe !

Exemple de manip. n° 3
Suivant le même processus utilisé dans l’exemple n° 2, mais en sélectionnant
d’abord la dernière ligne de la table, puis la première, ce qui a pour effet
de positionner l’ascenseur sur la partie haute de sa « glissière », alors la
suppression est parfaitement effectuée lors du click sur Bouton de
suppression.

Quelqu’un a-t-il eu le même problème ? ( J’utilise WD 9.00 )

Merci d’avance pour vos réponses……….

Voici CI-DESSOUS, pour compréhension, le code sur évènement « Click » du
bouton DE SUPPRESSION DES LIGNES ( Les lignes « INFOS » sont rajoutées
uniquement pour aide au débuggage et contrôle visuel lors du processus de
suppression. )

SI OuiNon("Voulez-vous vraiment supprimer la (les) ligne(s) sélectionnée(s)
?") ALORS

nb_lignes_selectionnees = TableSelectOccurrence(Table_ORDRES_FABRICATION)
nb_lignes_a_supprimer = nb_lignes_selectionnees

//info(" Nombre de lignes à supprimer = " nb_lignes_a_supprimer)

SI nb_lignes_a_supprimer > 0 ALORS

TANTQUE nb_lignes_a_supprimer > 0
indice_flag_selection = TableSelect(Table_ORDRES_FABRICATION,1)
//Info(" le nombre de lignes sélectionnées dans la table est : "
nb_lignes_a_supprimer CR " L'indice de la ligne à supprimer [ ] est : "
indice_flag_selection)

//Info("ON VA SUPPRIMER LA LIGNE D' INDICE N° " indice_flag_selection)
TableSupprime(Table_ORDRES_FABRICATION,indice_flag_selection)
FIN
nb_lignes_a_supprimer = nb_lignes_a_supprimer - 1
FIN
FIN


si vous êtes en WD10 utilisez "pour toutes lignes sélectionnées"

--
Cordialement JeAn-PhI
Posté le 15 novembre 2006 - 21:26
Merci J-P pour votre réponse. Je développe sur WD 9.00 et désirerais savoir comment résoudre ce problème car de nombreuses fenêtres de mon programme contiennent des Tables fichiers multi-sélection.

J'ai trouvé une partie de la solution qui consiste, avec appui simultané des touches CTRL Touche "Début" à faire remonter l'ascenseur de la table dans la partie supérieure haute de sa glissière. La sélection de toutes les lignes reste active et le focus est donné à la première ligne de la table. Résultat = la suppression est réalisée parfaitement.

Afin que l'action sur les Touches soit transparente pour l'utilisateur, j'ai donc simulé cette action par la fonction : EnvoieTouche("^{ORIGINE}"), mais ce code ne provoque pas de résultat. C'est la première fois que j'expérimente cette fonction .... Peut-être ai-je commis une erreur de syntaxe ?
Merci d'avance pour votre aide....







Cordialement,
Posté le 16 novembre 2006 - 09:38
André avait soumis l'idée :

Merci J-P pour votre réponse. Je développe sur WD 9.00 et désirerais savoir
comment résoudre ce problème car de nombreuses fenêtres de mon programme
contiennent des Tables fichiers multi-sélection.

J'ai trouvé une partie de la solution qui consiste, avec appui simultané des
touches CTRL Touche "Début" à faire remonter l'ascenseur de la table dans
la partie supérieure haute de sa glissière. La sélection de toutes les lignes
reste active et le focus est donné à la première ligne de la table. Résultat
= la suppression est réalisée parfaitement.

Afin que l'action sur les Touches soit transparente pour l'utilisateur, j'ai
donc simulé cette action par la fonction : EnvoieTouche("^{ORIGINE}"), mais
ce code ne provoque pas de résultat. C'est la première fois que
j'expérimente cette fonction .... Peut-être ai-je commis une erreur de
syntaxe ? Merci d'avance pour votre aide....







Cordialement,


essayez ceci je viens de faire le test [WD9 25k] sur une table de 2636
lignes et cela fonctionne

i est un entier

POUR i=1 A TableSelectOccurrence(MaTable)
Trace("Ligne sélectionnée : "+MaTable[TableSelect(MaTable,i)])
FIN

--
Cordialement JeAn-PhI