|
| Inicio → WINDEV 2025 → [WD17] Table remplit avec tableau de Variable, récuprer l'indice |
| [WD17] Table remplit avec tableau de Variable, récuprer l'indice |
| Iniciado por 77001, 18,dic. 2012 13:44 - 7 respuestas |
| |
| | | |
|
| |
Miembro registrado 12 mensajes |
|
| Publicado el 18,diciembre 2012 - 13:44 |
Bonjour, j'ai un petit soucis pour récuperer l'indice d'une table lié à un tableau de variable. J'ai un objet qui possède un tableau d'objet affiché dans une table (Table_Adresse). Source parcourue : gclMonEntité.TabAdresse Variable mémorisé : gclMonEntité.TabAdresse[n]
En sélectionnant une ligne je récupère donc un objet adresse, que j'associe à un objet local gclMonAdresse. Ce qui donne gclMonAdresse = Table_Adresse
Ensuite je modifie mon objet, et je voudrais le réassigné dans mon tableau. De cette facon gclMonEntité.TabAdresse[n] = gclMonAdresse cependant je ne connais pas l'indice n donc impossible de modifié mon tableau.
Merci de vote aide si vous avez une idée. Cordialement Paul |
| |
| |
| | | |
|
| | |
| |
| Publicado el 18,diciembre 2012 - 15:58 |
Bonjour, Au lieu d'utiliser un tableau d'objets, le plus simple est d'utiliser un tableau d'objets dynamiques. Ainsi la table renvoie un pointeur vers l'objet en question, et de fait toute modification se fera directement sur l'objet du tableau, puisqu'il n'y aura plus de duplication.
Frédéric.
"EKYO" a écrit dans le message de groupe de discussion : 0582d335f0252882c30cfdb7c19bee70@news.pcsoft...
Bonjour, j'ai un petit soucis pour récuperer l'indice d'une table lié à un tableau de variable. J'ai un objet qui possède un tableau d'objet affiché dans une table (Table_Adresse). Source parcourue : gclMonEntité.TabAdresse Variable mémorisé : gclMonEntité.TabAdresse[n]
En sélectionnant une ligne je récupère donc un objet adresse, que j'associe à un objet local gclMonAdresse. Ce qui donne gclMonAdresse = Table_Adresse
Ensuite je modifie mon objet, et je voudrais le réassigné dans mon tableau. De cette facon gclMonEntité.TabAdresse[n] = gclMonAdresse cependant je ne connais pas l'indice n donc impossible de modifié mon tableau.
Merci de vote aide si vous avez une idée. Cordialement Paul |
| |
| |
| | | |
|
| | |
| |
| Publicado el 18,diciembre 2012 - 19:22 |
Il utilise déjà un tableau d'objet dynamique je pense, ton problème est de récupérer ton indice dans le tableau, notamment en cas de trie. La table se trie mais pas le tableau d'objet. 2 solutions soit on tri le tableau en même temps que la table soit tu fais une fonction dans ton objet entité qui va parcourir ton tableau d'objet adresse genre :
//Pour une suppression PROCEDURE TableauSupprimeAdresse(ObjASupprimer) i,NbLignes sont des entiers
NbLignes=Tabadresse..Occurrence POUR i=1 A NbLignes SI ObjASupprimer=Tabadresse[i] ALORS TableauSupprime(TabAdresse,i) RETOUR FIN FIN |
| |
| |
| | | |
|
| | |
| |
| Publicado el 19,diciembre 2012 - 10:38 |
Si c'est un tableau d'objets dynamiques (pas un tableau dynamique d'objets, mais bien un tableau d'objets dynamiques, bref un tableau de pointeurs), il n'a pas besoin de connaitre l'indice dans la table ni dans le tableau pour y faire des mises à jour. La table renvoie un POINTEUR vers l'objet courant. Donc la variable "pointe" déjà vers le bon élément du tableau. Le fait de faire une mise à jour sur la variable revient à la faire directement sur l'élément du tableau. Donc avec un tableau de pointeurs, c'est assez simple: 1. La table renvoie un pointeur vers l'objet correspondant à la ligne sélectionnée 2. Les affectations sont donc faites directement dans le tableau 3. Pour mettre à jour le champ table, un simple TableAffiche suffit.
J'ai fait un test il y a quelques temps, pour voir ce qu'on peut tirer de la POO en Windev. J'avais donc un tableau dynamique d'objets dynamiques, et un table qui les affiche via le DataBinding. Voici le code de double-clic de ma table, pour afficher une fenêtre qui permet de mettre à jour la ligne en question:
pclArticleCourant est un Article dynamique pclArticleCourant = TABLE_Table1
SI Ouvre(FEN_Fenêtre11,pclArticleCourant) ALORS TableAffiche(TABLE_Table1,taCourantBandeau) FIN
Aucun indice dans ce code, pas de notion de tri, de recherche... et ça fonctionne.
Frédéric. "Sylvain" a écrit dans le message de groupe de discussion : 0d4b40ce64d236edc3c4a02eb4087170@news.pcsoft...
Il utilise déjà un tableau d'objet dynamique je pense, ton problème est de récupérer ton indice dans le tableau, notamment en cas de trie. La table se trie mais pas le tableau d'objet. 2 solutions soit on tri le tableau en même temps que la table soit tu fais une fonction dans ton objet entité qui va parcourir ton tableau d'objet adresse genre :
//Pour une suppression PROCEDURE TableauSupprimeAdresse(ObjASupprimer) i,NbLignes sont des entiers
NbLignes=Tabadresse..Occurrence POUR i=1 A NbLignes SI ObjASupprimer=Tabadresse[i] ALORS TableauSupprime(TabAdresse,i) RETOUR FIN FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 64 mensajes |
|
| Publicado el 19,diciembre 2012 - 13:11 |
Je suis entièrement d'accord avec toi pour récupérer un objet de la table et travailler dessus. Et aussi le fait qu'une modification de ton tableau d'objet + un tableaffiche va actualiser ta table. Par contre, le tableau d'objet pointe bien sur la table mais (sauf erreur de ma part) la table pointe pas du tout sur le tableau d'objet. C'est à dire que si tu supprimes une ligne de ta table elle ne va pas se supprimer dans ton tableau d'objet. Et c'est là tous le problème, du coup tu es obligé de savoir sur quelle ligne l'utilisateur a cliqué et pour ça il te faut l'indice de la ligne sélectionné. Et le problème se complique encore sur ta table a été triée (par ville par exemple), les indices de la table ne corresponde plus aux indice du tableau d'objet...
Frédéric DEMILLY a écrit dans le message de news <50d1745b$1@news.pcsoft.fr> :
Si c'est un tableau d'objets dynamiques (pas un tableau dynamique d'objets, mais bien un tableau d'objets dynamiques, bref un tableau de pointeurs), il n'a pas besoin de connaitre l'indice dans la table ni dans le tableau pour y faire des mises à jour. La table renvoie un POINTEUR vers l'objet courant. Donc la variable "pointe" déjà vers le bon élément du tableau. Le fait de faire une mise à jour sur la variable revient à la faire directement sur l'élément du tableau. Donc avec un tableau de pointeurs, c'est assez simple: 1. La table renvoie un pointeur vers l'objet correspondant à la ligne sélectionnée 2. Les affectations sont donc faites directement dans le tableau 3. Pour mettre à jour le champ table, un simple TableAffiche suffit.
J'ai fait un test il y a quelques temps, pour voir ce qu'on peut tirer de la POO en Windev. J'avais donc un tableau dynamique d'objets dynamiques, et un table qui les affiche via le DataBinding. Voici le code de double-clic de ma table, pour afficher une fenêtre qui permet de mettre à jour la ligne en question:
pclArticleCourant est un Article dynamique pclArticleCourant = TABLE_Table1
SI Ouvre(FEN_Fenêtre11,pclArticleCourant) ALORS TableAffiche(TABLE_Table1,taCourantBandeau) FIN
Aucun indice dans ce code, pas de notion de tri, de recherche... et ça fonctionne.
Frédéric. "Sylvain" a écrit dans le message de groupe de discussion : 0d4b40ce64d236edc3c4a02eb4087170@news.pcsoft...
Il utilise déjà un tableau d'objet dynamique je pense, ton problème est de récupérer ton indice dans le tableau, notamment en cas de trie. La table se trie mais pas le tableau d'objet. 2 solutions soit on tri le tableau en même temps que la table soit tu fais une fonction dans ton objet entité qui va parcourir ton tableau d'objet adresse genre :
//Pour une suppression PROCEDURE TableauSupprimeAdresse(ObjASupprimer) i,NbLignes sont des entiers
NbLignes=Tabadresse..Occurrence POUR i=1 A NbLignes SI ObjASupprimer=Tabadresse[i] ALORS TableauSupprime(TabAdresse,i) RETOUR FIN FIN
|
| |
| |
| | | |
|
| | |
| |
| Publicado el 19,diciembre 2012 - 16:33 |
Effectivement, je n'avais pas vu le problème sous cet angle, puisque dans le mail de départ d'EKYO il n'était pas fait mention de suppression, mais de modification. A mon avis, le plus "simple" est d'avoir un identifiant unique dans chaque objet, et "d'afficher" cet identifiant dans une colonne masquée dans la table. En cas de suppression d'une ligne, il "suffit" alors de chercher l'objet possédant cet identifiant.
Petite idée à tester (c'est capilotracté, mais bon): si on ajoute dans la classe une propriété qui renvoie "objet", c'est à dire le pointeur sur l'objet, et que via le databinding on associe cette propriété à une colonne de la table, est-ce qu'on peut récupérer directement l'objet à partir d'une ligne en particulier ?
Frédéric.
"Sylvain" a écrit dans le message de groupe de discussion : 302230e5993b4c0da439e0c82733381f@news.pcsoft...
Je suis entièrement d'accord avec toi pour récupérer un objet de la table et travailler dessus. Et aussi le fait qu'une modification de ton tableau d'objet + un tableaffiche va actualiser ta table. Par contre, le tableau d'objet pointe bien sur la table mais (sauf erreur de ma part) la table pointe pas du tout sur le tableau d'objet. C'est à dire que si tu supprimes une ligne de ta table elle ne va pas se supprimer dans ton tableau d'objet. Et c'est là tous le problème, du coup tu es obligé de savoir sur quelle ligne l'utilisateur a cliqué et pour ça il te faut l'indice de la ligne sélectionné. Et le problème se complique encore sur ta table a été triée (par ville par exemple), les indices de la table ne corresponde plus aux indice du tableau d'objet...
Frédéric DEMILLY a écrit dans le message de news <50d1745b$1@news.pcsoft.fr> :
Si c'est un tableau d'objets dynamiques (pas un tableau dynamique d'objets, mais bien un tableau d'objets dynamiques, bref un tableau de pointeurs), il n'a pas besoin de connaitre l'indice dans la table ni dans le tableau pour y faire des mises à jour. La table renvoie un POINTEUR vers l'objet courant. Donc la variable "pointe" déjà vers le bon élément du tableau. Le fait de faire une mise à jour sur la variable revient à la faire directement sur l'élément du tableau. Donc avec un tableau de pointeurs, c'est assez simple: 1. La table renvoie un pointeur vers l'objet correspondant à la ligne sélectionnée 2. Les affectations sont donc faites directement dans le tableau 3. Pour mettre à jour le champ table, un simple TableAffiche suffit.
J'ai fait un test il y a quelques temps, pour voir ce qu'on peut tirer de la POO en Windev. J'avais donc un tableau dynamique d'objets dynamiques, et un table qui les affiche via le DataBinding. Voici le code de double-clic de ma table, pour afficher une fenêtre qui permet de mettre à jour la ligne en question:
pclArticleCourant est un Article dynamique pclArticleCourant = TABLE_Table1
SI Ouvre(FEN_Fenêtre11,pclArticleCourant) ALORS TableAffiche(TABLE_Table1,taCourantBandeau) FIN
Aucun indice dans ce code, pas de notion de tri, de recherche... et ça fonctionne.
Frédéric. "Sylvain" a écrit dans le message de groupe de discussion : 0d4b40ce64d236edc3c4a02eb4087170@news.pcsoft...
Il utilise déjà un tableau d'objet dynamique je pense, ton problème est de récupérer ton indice dans le tableau, notamment en cas de trie. La table se trie mais pas le tableau d'objet. 2 solutions soit on tri le tableau en même temps que la table soit tu fais une fonction dans ton objet entité qui va parcourir ton tableau d'objet adresse genre :
//Pour une suppression PROCEDURE TableauSupprimeAdresse(ObjASupprimer) i,NbLignes sont des entiers
NbLignes=Tabadresse..Occurrence POUR i=1 A NbLignes SI ObjASupprimer=Tabadresse[i] ALORS TableauSupprime(TabAdresse,i) RETOUR FIN FIN
|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 197 mensajes |
|
| Publicado el 16,octubre 2019 - 14:36 |
Bonjour
je relance ce sujet car j'ai la même problématique.
J'ai une table rempli à partir d'un tableau d'objets, quand on modifie ça met à jour directement dans le tableau, c est top.
Pour la suppression, ça fonctionne quand l'user ne fait pas de tri sur la table. Si il y a un tri, l'indice entre la table et le tableau ne correspondent pas.
Je pourrais dans une colonne cachée y mettre un indice permettant de faire le lien entre le tableau et la table. J'aurais aimé avoir votre avis sur les différentes solutions possibles, ou mieux si il y a un automatisme dans windev où je suis passé à côté.
Merci |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 197 mensajes |
|
| Publicado el 16,octubre 2019 - 15:36 |
| |
| |
| | | |
|
| | | | |
| | |
|