PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Pb éléments non dispo en prog dans une Liste multisélection
Pb éléments non dispo en prog dans une Liste multisélection
Débuté par edith.bardin, 25 aoû. 2004 11:35 - 2 réponses
Posté le 25 août 2004 - 11:35
Bonjour,

Ayant une liste multi-sélection remplie à l'aide d'une requête SQL (select
simple) sur une table (externe) tout à fait basique (la valeur affichée étant
le libellé et la valeur mémorisée étant l'identifiant), j'ai utilisé les
lignes de codes proposées par la doc de WinDev pour récupérer la valeur des
lignes sélectionnées dans une liste multi-sélection :

ii est un entier = 1
iLigneSelectionnee est un entier
iLigneSelectionnee=ListeSelect(ListeTOTO,1)

TANTQUE iLigneSelectionnee<>-1
// Récup de l'ID de la ligne sélectionnée MonIDToto = ListeTOTO[iLigneSelectionnee]..ValeurMémorisée
ii++
iLigneSelectionnee=ListeSelect(ListeTOTO,ii)
FIN

Prenons l'exemple de la sélection de la 3ème et de la 5ème lignes de la liste
multi-sélection, le message d'erreur est invariant :
'Erreur à la ligne xx du traitement Clic sur BoutonChose.
L'indice spécifié[3]est invalide.
ListeTOTO utilise un fichier ou une requête comme source de données.
Seuls les éléments visibles sont accessibles en programmation.'

Les autres essais pour récupérer cette fois la valeur AFFICHEE de la ligne
sélectionnée génère la même erreur...
(Idem aussi avec la syntaxe 'MonIDToto = ListeTOTO[iLigneSelectionnee]')

Question : Quel intérêt de permettre de garder une valeur pour une ligne
(affichée et/ou mémorisée) si on ne peut y accéder directement en programmation
?
Me faudra-t-il ajouter une à une les valeurs des lignes dans la liste multi-sélection
sans passer par une requête SQL ?!!!

Si c'est moi qui pêche sur ce coup là par ma méconnaissance de WinDev, je
suis preneuse de vos conseils avisés. Sinon je serais 'quelque peu' déçue
par WinDev...

Je vous remercie par avance de partager avec moi votre pratique de WinDev.

Bonne journée,
Edith BARDIN.
Posté le 25 août 2004 - 11:55
Le probleme vient particulierement du fait que dans une table fichier on
ne peut acceder par programmation qu'aux lignes ' visibles ' au moment
de l'execution du code.

Passez par une table mémoire ( votre table est certainement petite, on
autorise rarement une multi sélection si il y a vraiment beacoup
d'enregistrements ).

Remplissez la table avec FichierVersTableMemoire()

Comme il n'y a pas de valeur mémorisée, placez simplement la valeur à
mémoriser dans une colonne invisible et le tour est joué ^^


Ex :

( table mémoire avec deux colonnes NOM et IDCLIENT(cachée) )

ReqClient est une source de données
HExécuteRequêteSQL(ReqClient,"SELECT NOM,IDCLIENT FROM CLIENT")
FichierVersTableMemoire(MaTable,ReqClient)

Et cette ligne pour récuperer l'ID souhaité.
MonIDToto = ListeTOTO[iLigneSelectionnee][2]


Edith BARDIN wrote:

Bonjour,

Ayant une liste multi-sélection remplie à l'aide d'une requête SQL (select
simple) sur une table (externe) tout à fait basique (la valeur affichée étant
le libellé et la valeur mémorisée étant l'identifiant), j'ai utilisé les
lignes de codes proposées par la doc de WinDev pour récupérer la valeur des
lignes sélectionnées dans une liste multi-sélection :

ii est un entier = 1
iLigneSelectionnee est un entier
iLigneSelectionnee=ListeSelect(ListeTOTO,1)

TANTQUE iLigneSelectionnee<>-1
// Récup de l'ID de la ligne sélectionnée MonIDToto = ListeTOTO[iLigneSelectionnee]..ValeurMémorisée
ii++
iLigneSelectionnee=ListeSelect(ListeTOTO,ii)
FIN

Prenons l'exemple de la sélection de la 3ème et de la 5ème lignes de la liste
multi-sélection, le message d'erreur est invariant :
'Erreur à la ligne xx du traitement Clic sur BoutonChose.
L'indice spécifié[3]est invalide.
ListeTOTO utilise un fichier ou une requête comme source de données.
Seuls les éléments visibles sont accessibles en programmation.'

Les autres essais pour récupérer cette fois la valeur AFFICHEE de la ligne
sélectionnée génère la même erreur...
(Idem aussi avec la syntaxe 'MonIDToto = ListeTOTO[iLigneSelectionnee]')

Question : Quel intérêt de permettre de garder une valeur pour une ligne
(affichée et/ou mémorisée) si on ne peut y accéder directement en programmation
?
Me faudra-t-il ajouter une à une les valeurs des lignes dans la liste multi-sélection
sans passer par une requête SQL ?!!!

Si c'est moi qui pêche sur ce coup là par ma méconnaissance de WinDev, je
suis preneuse de vos conseils avisés. Sinon je serais 'quelque peu' déçue
par WinDev...

Je vous remercie par avance de partager avec moi votre pratique de WinDev.

Bonne journée,
Edith BARDIN.




Posté le 25 août 2004 - 13:15
Je vous remercie de votre réponse rapide même si celle-ci me confirme que
l'avantage de pourvoir mémoriser les valeurs d'une liste n'est pas utilisable
en programmation avec WinDev...

La solution de passer par une table intermédiaire est dans ce cas inutile
étant donné que ma liste est alimentée par une requête et que si la ligne
3 est sélectionnée, je peux alors aller récupérer le troisième élément de
ma requête SQL...
Rien de bien satisfaisant que de devoir tout manipuler à la main alors que
WinDev pouvait proposer l'acces direct aux éléments d'une banale liste...
Mais bon.
Je vous souhaite une bonne journée,
Edith BARDIN.


Le probleme vient particulierement du fait que dans une table fichier on


ne peut acceder par programmation qu'aux lignes ' visibles ' au moment
de l'execution du code.

Passez par une table mémoire ( votre table est certainement petite, on
autorise rarement une multi sélection si il y a vraiment beacoup
d'enregistrements ).

Remplissez la table avec FichierVersTableMemoire()

Comme il n'y a pas de valeur mémorisée, placez simplement la valeur à
mémoriser dans une colonne invisible et le tour est joué ^^


Ex :

( table mémoire avec deux colonnes NOM et IDCLIENT(cachée) )

ReqClient est une source de données
HExécuteRequêteSQL(ReqClient,"SELECT NOM,IDCLIENT FROM CLIENT")
FichierVersTableMemoire(MaTable,ReqClient)

Et cette ligne pour récuperer l'ID souhaité.
MonIDToto = ListeTOTO[iLigneSelectionnee][2]


Edith BARDIN wrote:

Bonjour,

Ayant une liste multi-sélection remplie à l'aide d'une requête SQL (select
simple) sur une table (externe) tout à fait basique (la valeur affichée

étant
le libellé et la valeur mémorisée étant l'identifiant), j'ai utilisé les
lignes de codes proposées par la doc de WinDev pour récupérer la valeur

des
lignes sélectionnées dans une liste multi-sélection :

ii est un entier = 1
iLigneSelectionnee est un entier
iLigneSelectionnee=ListeSelect(ListeTOTO,1)

TANTQUE iLigneSelectionnee<>-1
// Récup de l'ID de la ligne sélectionnée MonIDToto = ListeTOTO[iLigneSelectionnee]..ValeurMémorisée
ii++
iLigneSelectionnee=ListeSelect(ListeTOTO,ii)
FIN

Prenons l'exemple de la sélection de la 3ème et de la 5ème lignes de la

liste
multi-sélection, le message d'erreur est invariant :
'Erreur à la ligne xx du traitement Clic sur BoutonChose.
L'indice spécifié[3]est invalide.
ListeTOTO utilise un fichier ou une requête comme source de données.
Seuls les éléments visibles sont accessibles en programmation.'

Les autres essais pour récupérer cette fois la valeur AFFICHEE de la ligne
sélectionnée génère la même erreur...
(Idem aussi avec la syntaxe 'MonIDToto = ListeTOTO[iLigneSelectionnee]')

Question : Quel intérêt de permettre de garder une valeur pour une ligne
(affichée et/ou mémorisée) si on ne peut y accéder directement en programmation
?
Me faudra-t-il ajouter une à une les valeurs des lignes dans la liste

multi-sélection
sans passer par une requête SQL ?!!!

Si c'est moi qui pêche sur ce coup là par ma méconnaissance de WinDev,

je
suis preneuse de vos conseils avisés. Sinon je serais 'quelque peu' déçue
par WinDev...

Je vous remercie par avance de partager avec moi votre pratique de WinDev.

Bonne journée,
Edith BARDIN.