PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Monter/Descendre Ligne dans une table mémoire.
Monter/Descendre Ligne dans une table mémoire.
Iniciado por Antoine GIDROL, abr., 21 2005 11:11 AM - 6 respostas
Publicado em abril, 21 2005 - 11:11 AM
Bonjour,

Je cherche à remonter/descendre une ligne dans une table mémoire.
Auriez vous un moyen rapide à mettre en place ?

Par exemple : j'ai une table avec :

ligne1
ligne2
ligne3

Je voudrais remonter ma ligne 3 en position 2
et je voudrais avoir au resultat donc :

ligne1
ligne3
ligne2

Pour le moment, je ne trouve comme solution,
que d'inserer une nouvelle ligne2 apres la ligne3
puis de supprimer ma ligne2

existe t il une autre solution, plus simple ?


D'avance merci

Antoine
Publicado em abril, 21 2005 - 12:02 PM
je ne pense pas

Antoine GIDROL wrote:
Bonjour,

Je cherche à remonter/descendre une ligne dans une table mémoire.
Auriez vous un moyen rapide à mettre en place ?

Par exemple : j'ai une table avec :

ligne1
ligne2
ligne3

Je voudrais remonter ma ligne 3 en position 2
et je voudrais avoir au resultat donc :

ligne1
ligne3
ligne2

Pour le moment, je ne trouve comme solution,
que d'inserer une nouvelle ligne2 apres la ligne3
puis de supprimer ma ligne2

existe t il une autre solution, plus simple ?


D'avance merci

Antoine

Publicado em abril, 21 2005 - 12:16 PM
Antoine GIDROL a émis l'idée suivante :
Bonjour,

Je cherche à remonter/descendre une ligne dans une table mémoire.
Auriez vous un moyen rapide à mettre en place ?

Par exemple : j'ai une table avec :

ligne1
ligne2
ligne3

Je voudrais remonter ma ligne 3 en position 2
et je voudrais avoir au resultat donc :

ligne1
ligne3
ligne2

Pour le moment, je ne trouve comme solution,
que d'inserer une nouvelle ligne2 apres la ligne3
puis de supprimer ma ligne2

existe t il une autre solution, plus simple ?


D'avance merci

Antoine


ajoute une colonne cachée Num, contenant un numéro de ligne et trie la
table sur cette colonne.
il te suffit de changer le numéro, et de rafraichir la table pour
changer l'ordre des lignes

Bertrand
Publicado em abril, 21 2005 - 12:46 PM
pour éviter l'ajout puis la suppression : quelque chose comme cela (je tape comme je parle et je n'ai jamais testé n'ayant pas Windev à portée de main)

nbre_colonne est un entier = tableoccurence(tatable,tocolonne)
ligne_memoire est un tableau de nbre_colonne //pour stocker la ligne inférieure (là peut-etre problème si ta table contient nombre et chaine -> utilise le type variant!) de plus pour la syntaxe de mémoire je ne sais plus
//
i est un entier //numéro de colonne
j est un entier //numéro de ligne à donner par exemple j = 2 dans ton exemple
//
pour i = 1 a nbre_colonne
ligne_memoire[i] = table[j][i] //on stocke dans la variable tableau la ligne "j"
table[j][i] = table[j + 1][i] // on alimente les cellules une à une de la ligne "j"
table[j + 1][i] = ligne_memoire[i] //on réalimente la ligne "j+1" avec la variable tableau
fin

A essayer, le principe doit être bon mais c'est sans garantie .... à voir si + rapide ou non que ta méthode.


Bon dev ...

Michel.
Publicado em abril, 21 2005 - 1:01 PM
Je viens de lire la réponse avec le numéro de ligne caché.
Et oui le coup du numéro de ligne caché ! Encore + fort et sans doute + performant que ma solution. Comme quoi, développer en ermite n'est pas la solution.

Au fait : évidemnement, il faut toujour raffraîchir la table après MAJ.

Michel.
Publicado em abril, 21 2005 - 5:15 PM
Bonjour,

et merci de vos reponses.

Le numero de ligne caché est bien plus simple, je vais utiliser cette
solution

Merci encore

Antoine


"Michel LION" <mlion@tele2.fr> a écrit dans le message de
news:4267604c$1@news.pcsoft.fr...

Je viens de lire la réponse avec le numéro de ligne caché.
Et oui le coup du numéro de ligne caché ! Encore + fort et sans doute +

performant que ma solution. Comme quoi, développer en ermite n'est pas la
solution.

Au fait : évidemnement, il faut toujour raffraîchir la table après MAJ.

Michel.


Publicado em abril, 21 2005 - 6:11 PM
Antoine GIDROL a écrit :
Bonjour,

Je cherche à remonter/descendre une ligne dans une table mémoire.
Auriez vous un moyen rapide à mettre en place ?

Par exemple : j'ai une table avec :

ligne1
ligne2
ligne3

Je voudrais remonter ma ligne 3 en position 2
et je voudrais avoir au resultat donc :

ligne1
ligne3
ligne2

Pour le moment, je ne trouve comme solution,
que d'inserer une nouvelle ligne2 apres la ligne3
puis de supprimer ma ligne2

existe t il une autre solution, plus simple ?


D'avance merci

Antoine



Bonjour Antoine
voici les deux méthodes de notre classe sur le sujet :
:m_cNomTable est le nom de la table aliméntée pas paramètre au constructeur.

// Méthode qui va monter la ligne sélectionnée de la table
PROCEDURE Monte()
//Pour modifier la position d'une ligne, dans la liste, il ne faut en
sélectionner qu'une.
SI TableSelectOccurrence(:m_cNomTable)>1 ALORS
Erreur(MessTraduit(5000))
RETOUR
FIN
i,PosCour sont des entier
// on ne monte que les lignes > 1
SI TableSelect(:m_cNomTable)>1 ALORS
// récupère l'indice en cours
PosCour = TableSelect(:m_cNomTable)
// ajoute une ligne tampon pour assuer le déplacement
TableInsère(:m_cNomTable)
// Déplace les valeurs
POUR i=1 A TableOccurrence(:m_cNomTable,toColonne)
{:m_cNomTable,indChamp}[PosCour][i] = {:m_cNomTable,indChamp}[Poscour
-1][i]
{:m_cNomTable,indChamp}[PosCour -1][i] =
{:m_cNomTable,indChamp}[PosCour + 1][i]
FIN
// supprime la ligne inutile
TableSupprime(:m_cNomTable,PosCour +1)
// repositionne la sélection
TableSelectMoins(:m_cNomTable,poscour)
TableSelectPlus(:m_cNomTable,PosCour - 1)
FIN

// Méthode qui va déscendre la ligne sélectionnée de la table
PROCEDURE Descend()
//Pour modifier la position d'une ligne, dans la liste, il ne faut en
sélectionner qu'une.
SI TableSelectOccurrence(:m_cNomTable)<>1 ALORS
Erreur(MessTraduit(5000))
RETOUR
FIN
i,PosCour sont des entier
// on ne descend que les lignes < dernière
SI TableSelect(:m_cNomTable)< TableOccurrence(:m_cNomTable) ALORS
// ajoute une ligne tampon pour assuer le déplacement
TableInsert(:m_cNomTable,"",TableSelect(:m_cNomTable)+1)
// récupère l'indice en cours
PosCour = TableSelect(:m_cNomTable)
// Déplace les valeurs
POUR i=1 A TableOccurrence(:m_cNomTable,toColonne)
{:m_cNomTable,indChamp}[PosCour +1][i] =
{:m_cNomTable,indChamp}[PosCour][i]
{:m_cNomTable,indChamp}[PosCour][i] = {:m_cNomTable,indChamp}[PosCour
+ 2][i]
FIN
// supprime la ligne inutile
TableSupprime(:m_cNomTable,PosCour + 2)
// repositionne la sélection
TableSelectMoins(:m_cNomTable,PosCour)
TableSelectPlus(:m_cNomTable,PosCour + 1)
FIN

++ R&B
WDForge.org