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 :

Remplir combo dans un champ table par ligne [WD22]


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut Remplir combo dans un champ table par ligne
    Bonjour à tous !

    Je souhaiterai avoir un peu d'aide concernant un petit problème que je n'arrive pas à résoudre. J'ai un champ table dans lequel j'ai 3 colonnes de type Combo (toutes mes colonnes sont remplis par programmation à l'aide de requêtes).
    Lorsque je sélectionne une valeur dans 1ère ligne du menu déroulant de la colonne 1, je vais exécuter une requête dont la condition sera de lister dans la colonne 2 de la 1ère ligne qui est toujours une combo, toutes les données appartenant au choix de la valeur choisi dans le menu déroulant de la 1ère ligne de la colonne.

    Petite précision :
    A chaque sélection d'une valeur différente de celle choisi précédemment dans la colonne 1, je fais un ListeSupprimeTout() de la combo de la colonne 2.

    Le problème c'est que lorsque je passe à la ligne 2, que je choisi dans la colonne 1, une autre valeur que celle de la valeur de la ligne 1 et bien ! La valeur de ligne 1 de la colonne 2 est supprimée et contient la liste des valeurs faisant référence au choix de la valeur de ligne 1 colonne 1.

    Bon ! Je pense que vous avez rien compris donc je vais mettre une image pour essayer de vous apportez un peu plus de précision.

    En attendant, je vous remercie d'avance à tous pour votre aide.

    Cordialement.

    JbOne

    Nom : Capture.JPG
Affichages : 2271
Taille : 93,0 Ko

  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
    Quand tu modifies une donnée dans ligne2, colonne1, il y a un code qui s'exécute (ce fameux code qui ne donne pas le résultat voulu).
    Ce code il est dans un bouton, dans une fonction ? Ce code, il a quelles informations pour deviner qu'il faudrait modifier la ligne 2, et pas la ligne 1 ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Bonjour tbc92 et merci pour ta réponse, je pense que le mieux est de mettre le code que j'ai saisi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // Affiche la liste les risques appartenant à la nature du risque sélectionné
    nIdNatureRisque est un entier = TABLE_P3_RisqueSanteSecu.COL_P3_Risque[TABLE_P3_RisqueSanteSecu][TABLE_P3_RisqueSanteSecu.COL_P3_Risque[TABLE_P3_RisqueSanteSecu]]
     
    // Je supprime le contenu de la combo de la colonne pour afficher la nouvelle liste
    ListeSupprimeTout(COL_P3_Mesure)
     
    // J'exécute la requête qui va me permettre de générer la nouvelle liste en fonction de la valeur choisi dans la combo de la colonne 1
    HExécuteRequête(REQ_ListeLesRisques,hRequêteDéfaut,nIdNatureRisque)
    POUR TOUT REQ_ListeLesRisques
    	ListeAjoute(COL_P3_Mesure,REQ_ListeLesRisques.Risque_PropoMesure + gLien(REQ_ListeLesRisques.Risque_Id))
    FIN
    Alors ce code se trouve dans la procédure "Sélection d'une de colonne 1 de la table".

    Je te remercie d'avance pour ton aide.

    Cordialement.

    JbOne

  4. #4
    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
    Donc en ligne 6, puis en ligne 11, tu fais référence à COL_P3_mesure; Et le programme ne devine pas qu' il faut prendre le COl_P3_mesure de la ligne 2 ; il prend le 1er Col_P3_mesure qu'il trouve.

    J'essaierais quelque chose 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
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    t est un entier 
    ma_combo est un champ 
    // Affiche la liste les risques appartenant à la nature du risque sélectionné
    t = ma_table
    trace ("n° de ligne =  t") // Pour vérifier qu'il  traite bien la bonne ligne.
     
     
    nIdNatureRisque est un entier = TABLE_P3_RisqueSanteSecu.COL_P3_Risque[TABLE_P3_RisqueSanteSecu][TABLE_P3_RisqueSanteSecu.COL_P3_Risque[TABLE_P3_RisqueSanteSecu]]
     
    // Je supprime le contenu de la combo de la colonne pour afficher la nouvelle liste
     
    ma_combo = col_p3_mesure[t]
    trace ( " taille actuelle de la combo=" + listeoccurrence ( ma_combo) + " valeur actuelle =" + ma_combo[ma_combo] )   // Pour vérifier qu'on a bien 'choisi' la bonne combo 
    ListeSupprimeTout(ma_combo)
     
    // J'exécute la requête qui va me permettre de générer la nouvelle liste en fonction de la valeur choisi dans la combo de la colonne 1
    HExécuteRequête(REQ_ListeLesRisques,hRequêteDéfaut,nIdNatureRisque)
    POUR TOUT REQ_ListeLesRisques
    	ListeAjoute( ma_combo ,REQ_ListeLesRisques.Risque_PropoMesure + gLien(REQ_ListeLesRisques.Risque_Id))
    FIN
    Je ne sais pas si c'est bon. Ce que je sais, c'est qu'avec 2 ou 3 commandes de type 'Trace', tu vas pouvoir VERIFIER ce que fait ton programme.

    Tu peux aussi utiliser le Debugger pour vérifier ce que fait ton programme, mais c'est plus difficile à expliquer via un forum.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Merci tbc92, je viens de faire le test avec le code que tu m'as proposé mais il plante lorsque j'arrive ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ma_combo = col_p3_mesure[t]
    trace ( " taille actuelle de la combo=" + listeoccurrence ( ma_combo) + " valeur actuelle =" + ma_combo[ma_combo] )   // Pour vérifier qu'on a bien 'choisi' la bonne combo
    J'ai continué mes recherches sur le net et je suis tombé sur le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    nLigne est un entier
     
    nLigne = TableAjouteLigne(MaTable, "Test", "Bonjour")
    ListeAjoute(MaTable[nLigne].Col_Combo, "Valeur1")
    ListeAjoute(MaTable[nLigne].Col_Combo, "Valeur2")
     
    nLigne = TableAjouteLigne(MaTable, "Hello", "World")
    ListeAjoute(MaTable[nLigne].Col_Combo, "Test3")
    ListeAjoute(MaTable[nLigne].Col_Combo, "Test4")
    J'ai fait l'essai mais idem, ça plante avec le message d'erreur suivant :

    Erreur à la ligne 10 du traitement Sélection d'une ligne de COL_P3_Risque ( TABLE_P3_RisqueSanteSecu ).
    Vous avez appelé la fonction ListeAjoute.
    Commande invalide pour le champ car ce n'est ni une liste, ni une table, ni une combo.

    ----- Informations techniques -----

    Appel WL :
    Traitement de 'Sélection d'une ligne de COL_P3_Risque ( TABLE_P3_RisqueSanteSecu )' (FEN_PlanPrevention.TABLE_P3_RisqueSanteSecu.COL_P3_Risque), ligne 10, thread 0
    Fonction 'ListeAjoute', syntaxe 1

    Que s'est-il passé ?
    Commande invalide pour le champ car ce n'est ni une liste, ni une table, ni une combo.

    Code erreur : 10005
    Niveau : erreur fatale

    Dump de l'erreur du module 'wd220obj.dll' (22.0.306.9).
    Identifiant des informations détaillées (.err) : 10005
    Informations de débogage :
    Fonction (1,8)
    Informations supplémentaires :
    EIT_PILEWL :
    Sélection d'une ligne de COL_P3_Risque ( TABLE_P3_RisqueSanteSecu ) (FEN_PlanPrevention.TABLE_P3_RisqueSanteSecu.COL_P3_Risque), ligne 10
    EIT_DATEHEURE : 07/04/2017 13:41:48
    EIT_TYPE_WDFILE : <2>
    EIT_IDCODE : <33>

    Assistance
    Pour tant, je l'ai bien déclaré en tant que combo et d'ailleurs si j'enlève l'indice de la ligne, la fonction ListeAjoute() fonctionne normalement.

    Je sais plus trop quoi faire ... C'est quand même terrible que cela soit aussi compliqué.

    En te remerciant d'avance.

    Cordialement.

    JbOne

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Bon ! Je viens de trouver la solution en me servant du code que j'ai trouvé via le post suivant https://www.developpez.net/forums/d1...programmation/.

    Je vais mettre pour les prochains qui risque de rencontrer le même soucis le code qui fonctionne pour moi.
    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
     
    nLigne 			est un entier = TABLE_P3_RisqueSanteSecu
    sListeRisque 	est une chaîne
     
    // Affiche la liste des risques appartenant à la nature du risque sélectionné
    nIdNatureRisque est un entier = TABLE_P3_RisqueSanteSecu.COL_P3_Risque[TABLE_P3_RisqueSanteSecu][TABLE_P3_RisqueSanteSecu.COL_P3_Risque[TABLE_P3_RisqueSanteSecu]]
     
    ListeSupprimeTout(COL_P3_Mesure)
    HExécuteRequête(REQ_ListeLesRisques,hRequêteDéfaut,nIdNatureRisque)
    POUR TOUT REQ_ListeLesRisques
    	//ListeAjoute(TABLE_P3_RisqueSanteSecu.COL_P3_Mesure,REQ_ListeLesRisques.Risque_PropoMesure + glien(REQ_ListeLesRisques.Risque_Id))
    	sListeRisque = sListeRisque + REQ_ListeLesRisques.Risque_PropoMesure + gLien(REQ_ListeLesRisques.Risque_Id) + RC
    FIN
     
    TABLE_P3_RisqueSanteSecu[nLigne].COL_P3_Mesure..Contenu = sListeRisque
    En tout cas je te remercie de m'avoir aidé tbc92.

    @+

    JbOne

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

Discussions similaires

  1. [WD21] largeur colonne de type COMBO dans un champ table
    Par Maximino dans le forum WinDev
    Réponses: 6
    Dernier message: 27/07/2016, 13h56
  2. [WD18] probleme de selection d’une ligne dans un champ table,
    Par beauregard12 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/01/2016, 15h14
  3. [WD18] Remplir combo dans une table avec valeurs différentes
    Par turkijudo dans le forum WinDev
    Réponses: 1
    Dernier message: 03/11/2014, 10h27
  4. Inserer Des Images dans une table par ligne
    Par stratocasters dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 12/02/2010, 14h54
  5. [WD12] Numéro de ligne dans un champ table
    Par thierrybatlle dans le forum WinDev
    Réponses: 2
    Dernier message: 03/10/2008, 07h20

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