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 :

[W27] Drag and drop sur champ table avec ruptures


Sujet :

WinDev

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut [W27] Drag and drop sur champ table avec ruptures
    (re) Bonjour à tous

    Je poursuis mon projet de gestion de pensums pour enseignants. Lors de l'attribution d'enseignants a des modules d'enseignements dans les différentes classes, il est possible de fusionner deux modules d'enseignement en 1 (notamment lorsque d'effectifs réduits).

    Pour schématiser, c'est un peu le même système que le partage de vols par différentes compagnies aériennes

    Lorsque j'affiche donc mes enseignements dans les différentes classes, j'ai tenté de programmer un glisser - déposé pour fusionner deux leçons en une (selon image ci-dessous) mais c'est la première fois que je fais cela et je bute sur la destination ..

    Nom : 2022-11-25_12-01-36.png
Affichages : 164
Taille : 26,9 Ko

    Le champ table (rempli par programmation) possède donc les deux attributs : Est source et Est destination

    Dans le code d'initialisation de mon champ Table, j'ai donc les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TABLE_REQ_LeconsParCoursEffectif.DndSource = dndProgrammé
    DnDEvénement(StockeInfos, TABLE_REQ_LeconsParCoursEffectif, dndDébutGlisser)
    DnDEvénement(Fusionne, TABLE_REQ_LeconsParCoursEffectif, dndFinGlisser)
    Pour pouvoir déterminer une leçon précise (selon la classe, le cours, l'année et le semestre), il me faut 3 clés. Ces clés sont récupérées dans ma fonction StockeInfos qui se présente comme suit :

    Je stocke mes 3 clés dans 3 variables globales ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PROCÉDURE StockeInfos()
     
    nIndice est un entier
    nIndice = TableIndiceRupture(RUPT_Lecon)
    DnDCurseur(dndCopier)
     
    gnMonIDLiaisonCoursEffectif	= TABLE_REQ_LeconsParCoursEffectif[nIndice].COL_IDLiaisonCoursEffectif_ClasseSemestre
    gnMonIDLecon				= TABLE_REQ_LeconsParCoursEffectif[nIndice].COL_IDLecon
    gnMonIDLecMatEns			= TABLE_REQ_LeconsParCoursEffectif[nIndice].COL_IDLecMatEns
    Finalement, ma procédure pour la fin de la transaction devrait me permettre de récupérer les 3 clés de la destination pour la fusion mais impossible de récupérer ces valeurs :

    mes 3 valeurs de ma source sont bien là mais je n'arrive pas à pointer la destination.
    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
     
    PROCÉDURE Fusionne()
    nIndice est un entier
    nIndice = TableIndiceRupture(RUPT_Lecon)
    DnDCurseur(dndCopier)
     
    Info(gnMonIDLiaisonCoursEffectif)  //   Affiche ma première clé de la source 
    Info(gnMonIDLecon)                     //   Affiche ma seconde clé de la source 
    Info(gnMonIDLecMatEns)           // Affiche ma troisième clé de la source 
     
    Info(_DND.ChampCible)           //N'affiche rien ! 
     
    Info(TABLE_REQ_LeconsParCoursEffectif[nIndice].COL_IDLiaisonCoursEffectif_ClasseSemestre)   //   Affiche la même valeur que la source 
    Info(TABLE_REQ_LeconsParCoursEffectif[nIndice].COL_IDLecon)          //   Affiche la même valeur que la source 
    Info(TABLE_REQ_LeconsParCoursEffectif[nIndice].COL_IDLecMatEns)  //   Affiche la même valeur que la source

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 261
    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 261
    Par défaut
    Dans le code d'initialisation de ton champ Table, tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TABLE_REQ_LeconsParCoursEffectif.DndSource = dndProgrammé
    DnDEvénement(StockeInfos, TABLE_REQ_LeconsParCoursEffectif, dndDébutGlisser)
    DnDEvénement(Fusionne, TABLE_REQ_LeconsParCoursEffectif, dndFinGlisser)
    Puisque tu as mis ça dans le code d'initialisation du champ table, ce serait plus élégant de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    moimeme.DndSource = dndProgrammé
    DnDEvénement(StockeInfos, moimeme, dndDébutGlisser)
    DnDEvénement(Fusionne, moimeme, dndFinGlisser)
    Mais pour ma part, je n'aime pas quand les portions de codes sont disséminées un peu partout, je mettrais le code que tu avais, mais dans le code d'initialisation de la fenêtre interne (si j'ai bien suivi, cette table est dans une fenêtre interne).

    Cette procédure "Fusionne", elle est bien dans la fenêtre interne ?
    J'ai un cas un peu similaire, où je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dnd__cible est un entier 
    qtable est une chaîne 
    qtable = _DND.ChampCible
    dnd__cible = TableInfoXY( qtable,tiNumLigne,  _DND.SourisPosX , _DND.SourisPosY )
    SI dnd__cible < 1 ALORS RENVOYER -1
    Dans mon cas, c'est le numéro de la ligne où on lâche l'objet qui m'intéressait. Et je veux arrêter le process si on lâche l'objet sur les entêtes de colonnes de la table,

    En fait, je me dis que la variable _DND champCible ou qtable est quasiment inutile. Par construction, cette procédure ne s'exécute que si on a fait un 'lacher' sur la table TABLE_REQ_LeconsParCoursEffectif
    On devrait avoir le même résultat avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dnd__cible est un entier 
    dnd__cible = TableInfoXY( TABLE_REQ_LeconsParCoursEffectif,tiNumLigne,  _DND.SourisPosX , _DND.SourisPosY )
    SI dnd__cible < 1 ALORS RENVOYER -1
    Rappel : cette procédure "Fusionne()" est dans la fenêtre interne, celle qui contient la table TABLE_REQ_LeconsParCoursEffectif.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Dans le code d'initialisation de ton champ Table, tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TABLE_REQ_LeconsParCoursEffectif.DndSource = dndProgrammé
    DnDEvénement(StockeInfos, TABLE_REQ_LeconsParCoursEffectif, dndDébutGlisser)
    DnDEvénement(Fusionne, TABLE_REQ_LeconsParCoursEffectif, dndFinGlisser)
    Puisque tu as mis ça dans le code d'initialisation du champ table, ce serait plus élégant de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    moimeme.DndSource = dndProgrammé
    DnDEvénement(StockeInfos, moimeme, dndDébutGlisser)
    DnDEvénement(Fusionne, moimeme, dndFinGlisser)
    Mais pour ma part, je n'aime pas quand les portions de codes sont disséminées un peu partout, je mettrais le code que tu avais, mais dans le code d'initialisation de la fenêtre interne (si j'ai bien suivi, cette table est dans une fenêtre interne).

    Cette procédure "Fusionne", elle est bien dans la fenêtre interne ?
    J'ai un cas un peu similaire, où je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dnd__cible est un entier 
    qtable est une chaîne 
    qtable = _DND.ChampCible
    dnd__cible = TableInfoXY( qtable,tiNumLigne,  _DND.SourisPosX , _DND.SourisPosY )
    SI dnd__cible < 1 ALORS RENVOYER -1
    Dans mon cas, c'est le numéro de la ligne où on lâche l'objet qui m'intéressait. Et je veux arrêter le process si on lâche l'objet sur les entêtes de colonnes de la table,

    En fait, je me dis que la variable _DND champCible ou qtable est quasiment inutile. Par construction, cette procédure ne s'exécute que si on a fait un 'lacher' sur la table TABLE_REQ_LeconsParCoursEffectif
    On devrait avoir le même résultat avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dnd__cible est un entier 
    dnd__cible = TableInfoXY( TABLE_REQ_LeconsParCoursEffectif,tiNumLigne,  _DND.SourisPosX , _DND.SourisPosY )
    SI dnd__cible < 1 ALORS RENVOYER -1
    Rappel : cette procédure "Fusionne()" est dans la fenêtre interne, celle qui contient la table TABLE_REQ_LeconsParCoursEffectif.
    Top, merci

    Pour répondre à ta question : Cette procédure "Fusionne", elle est bien dans la fenêtre interne ?
    -> Oui elle est bien dans ma fenêtre interne.

    et pour :
    qtable est une chaîne
    qtable = _DND.ChampCible
    chez moi cela ne donne rien, mais je dois avoir fait des erreurs sur la programmation de mes DND..

    je vais essayer ton code, merci beaucoup

Discussions similaires

  1. [WD20] Problème Drag and Drop sur champ table
    Par lololebricoleur dans le forum WinDev
    Réponses: 2
    Dernier message: 13/07/2015, 20h25
  2. [WD17] Drag and Drop depuis une table vers un champ de saisie
    Par Dramon dans le forum WinDev
    Réponses: 0
    Dernier message: 24/02/2015, 16h36
  3. Drag and drop sur une PictureBox
    Par abdiouldbody dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/06/2009, 15h55
  4. Drag and Drop sur une image avec coordonnées générées
    Par psgman113 dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 28/04/2009, 21h58
  5. Drag and drop sur un JTree
    Par tomca dans le forum Composants
    Réponses: 4
    Dernier message: 02/08/2005, 10h54

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