IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Différence tableTrie et clic sur entete d'une table [WD19]


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut Différence tableTrie et clic sur entete d'une table
    Bonjour à tous,
    Je rencontre un problème de trie assez problématique.
    Losque je clique sur l'entête d'une colonne cela me fais un tri (croissant ou decroissant peu importe). Lorsque je double clique sur une ligne cela m'ouvre une fenêtre. A l'ouverture je récupère la dernière colonne trié et l'ordre. A la fermeture de la seconde fenêtre je met a jours ma table et la trie dans le même ordre.
    Mon problème est que le tri n'est pas identique. Cela me pose un problème car du coup la ligne sélectionné avant l'ouverture de la fenêtre n'est plus la même après.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    ListeColonnes est une chaîne
    ListeColonnes = TableColonnesTriées(TABLE_xxx)
    Trace(ListeColonnes)
     
    SI TableSelectOccurrence(TABLE_xxx) = 0 ALORS
    	Erreur("Aucune ligne dans le tableau n'a été sélectionné.", "Veuillez sélectionner une ligne pour la modifier.")
    SINON
    	nLigne est un entier = TableSelect(TABLE_xxx)
    	nRes est un entier
     
    	// Au retour on met à jour la table
    	TableSupprimeTout(TABLE_xxx)
    	RemplirTableXxx()
     
    	// On trie la table
    	TableTrie(TABLE_xxx, ListeColonnes)
     
     
    	//Garde la selection de la ligne selectionné
    	TableSelectPlus(TABLE_xxx,nLigne)
    Trace("Fin:"+ListeColonnes)	
     
    FIN
    Comment remédier a ce problème ?
    Merci

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Juste pour vérifier un point :
    Imaginons que l'utilisateur trie sur la colonne 'CLIENT'

    Après la ligne 17 de ton code, ta table est bien triée sur la colonne CLIENT.
    Mais ton problème, c'est que si tu avais plusieurs ligne pour le même client, peut-être que tu avais les commandes par client / Date avant l'ouverture de la fenêtre X, et maintenant, c'est trié selon client / code produit par exemple ...

    C'est bien dans la gestion des ex-aequo que tu as un problème ?

    Quoi-qu'il en soit, voici une solution :

    Mémoriser un n° de ligne n'est pas une solution viable. Imagine que ton application devienne une application réseau, et dans l'intervalle de temps, un autre utilisateur, sur un autre poste, ajoute ou supprime une ligne. Même si tu réussis à reconstituer le tri d'origine, tu risque d'avoir un décalage.

    En principe, dans ta table, tu as une colonne 'Clé-unique', ou éventuellement une combinaison de colonnes qui permet d'identifier sans ambiguïté une ligne (par exemple code client + code produite + date ....). Et avant d'ouvrir la fenêtre fille, il faut mémoriser cette clé unique. Puis après ton tabletrie(), il faut rechercher cette clé unique, par un tablecherche() par exemple.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonjour tbc92, merci pour ton retour.
    Oui mon tri est bien fait sur la bonne colonne, et c'est effectivement les exeaquo qui sont retrié (mais je n'ai pas trouvé selon quelle critère).
    J'ai effectivement une clé unique, je vais donc regarder ce que tu m'a indiqué.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonjour,
    Bon la conservation d'une ligne est faite comme cela m'a été indiqué.
    Maintenant pour mon problème de tri c'est un peu problématique car dans le cas ou j'ai beaucoup d'exaequo le tri change a chaque ouverture de fenetre fille... Ca risque de poser des probblèmes aux utilisateurs.
    C'est tout de même étrange qu'une même fonction tri de manière différente avec des paramètre identique.

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Quand l'utilisateur cliques sur le titre d'une colonne, les données sont triées sur cette colonne, mais , pour les ex-aequo, il conserve le tri précédent.
    Et si par hasard, das ta fenêtre tu as des bouton 'Monter' et 'Descendre' pour monter ou descendre telle ou telle ligne, le programme triera sur la colonne cliquée, mais pour les ex-aequo, il conservera le tri existant ( fait éventuellement par les boutons Monter et Descendre).

    Une fonction Tabletrie() brute de fonderie ne PEUT pas faire la même chose.

    MAIS, il y a toujours une solution.

    Tu ajoutes une colonne masquée dans ta table. Colonne de type numérique. Et pour ouvrir une fenêtre n°2... puis reconstituer le bon tri , tu peux taire un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    tb est un tableau associatif d'entiers
    n = tableoccurrence(matable)
    pour i = 1 a n
      tb[ matable.colonne_cle[i] ] = i
    fin
    //  Ouverture de l'autre fenetre, traitement 
     
    //  Reload de la table
    n = tableoccurrence(matable)
    pour i = 1 a n
      matable.colonne_cachee[i] = tb[  matable.colonne_cle[i] ]
    fin
    tabletrie( matable, "colonne_cachee")
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonsoir tbc92,
    Je n'ai pas de bouton monter/descendre dans la fenêtre fille. Et du coup je comprend pas trop car moi il ne garde pas du tout le tri précédent des exaecquo justement !
    Je regarderais le bout de code que tu m'a donné demain.
    Merci !

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonjour,
    Merci pour l'astuce ça fonctionne. Maintenant j'ai pu détecter d'autres soucis mais qui n'ont rien a voir. (Même si c'est tjs des comportements bizarres de windev )

    EDIT: et c'est la fonction de tri qui fou la m**** ... Pourquoi tant de haine ?!

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    J'ai réussi a me dépatouiller de mon bazar !!
    Merci tbc92 pour ton aide !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD14] Double-Clic sur ligne d'une table
    Par WindeveloP dans le forum WinDev
    Réponses: 5
    Dernier message: 26/02/2010, 22h08
  2. [WD14] Clic sur image d'une table
    Par jtkba dans le forum WinDev
    Réponses: 4
    Dernier message: 22/06/2009, 11h09
  3. TreeModelSort : Tri / clic sur entête d'une colonne
    Par Hades_L dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 15/05/2009, 11h09
  4. Réponses: 15
    Dernier message: 13/03/2007, 17h25
  5. Clic sur élément d'une requete affiché
    Par leloup84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/02/2006, 00h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo