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 :

[W28] Cocher toutes les cases d'une section de rupture dans champ table


Sujet :

WinDev

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 86
    Points
    86
    Par défaut [W28] Cocher toutes les cases d'une section de rupture dans champ table
    Bonjour à toutes et à tous,

    J'ai un tableau avec deux niveaux de ruptures.
    La dernière colonne de ma table contient une case à cocher.

    En cliquant sur l'entete de rupture correspondante, je souhaiterais que toutes les cases à cocher sous-jacentes soient sélectionnés/désélectionnées

    Nom : Ruptures.jpg
Affichages : 173
Taille : 24,3 Ko

    J'ai essayé en réalisation une action sur le click de souris de l'entête de rupture et en essayant dans un premier temps de juste pouvoir sélectionner 1 seul élément mais my syntaxe est incorrecte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    nindiceClasse	est un entier
    nIndiceMatiere	est un entier
    nindiceClasse															= TableIndiceRupture(RUPT_NomClasse)
    nIndiceMatiere															= TableIndiceRupture(RUPT_Matiere)
     
    TABLE_DetailHeuresAbsence[nindiceClasse][nIndiceMatiere].COL_Selection.Valeur	= 1
    J'obtiens le message suivant :

    Un champ n'a pas de sous-élément. L'opérateur '.' est interdit.
    Pensez-vous qu'il est possible de réaliser cette fonction ou bien il n'est pas possible d'atteindre un élément spécifique dans une double rupture ?
    Merci pour votre aide


    En essayant manuellement d'activer les cases à cocher, j'arrive à le faire pour le premier sous-groupe mais pas les suivants ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TABLE_DetailHeuresAbsence[nindiceClasse].COL_Selection					= 1
    TABLE_DetailHeuresAbsence[nindiceClasse+1].COL_Selection				= 1
    TABLE_DetailHeuresAbsence[nindiceClasse+2].COL_Selection				= 1
    Nom : Ruptures#2.jpg
Affichages : 159
Taille : 21,1 Ko

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour,

    Logiquement, ça devrait être possible en utilisant la bonne syntaxe. Je pense qu'il ne doit pas aimer le ".valeur".

    Dans le code de modification de ta case à cocher, tu fais une boucle qui va parcourir toutes les lignes entre les 2 ruptures.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 86
    Points
    86
    Par défaut
    oui merci, c'est probablement la solution.. mais je pêche un peu là... comment faire ma boucle qui ne lit que les lignes entre deux ruptures. J'arrive à modifier manuellement les lignes mais je cherche comment faire pour connaître le nombre de lignes dans ma rupture.

    J'essaie qqchose comme cela mais ça ne passe pas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nindiceClasse est un entier
    nblignes est un entier
    nindiceClasse				= TableIndiceRupture(RUPT_NomClasse)
    nblignes 					= TABLE_DetailHeuresAbsence[nindiceClasse]..Occurrence

    Merci pour la piste ...

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Malgré la bizarrerie du changement de valeur de INT_Coche (l'interrupteur de ta rupture) le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    nDébut	est un entier
    nFin	est un entier
    nIndice	est entier
    bCocher est un booléen
     
    nDébut	= TableIndiceRupture(RUPT_HautClasse)
    nFin	= TableIndiceRupture(RUPT_BasClasse)
    bCocher=INT_Coche	//INT_Coche change de valeur dans la boucle. Pourquoi, mystère, on mémorise sa valeur
    POUR nIndice=nDébut À nFin
    	COL_Coche[nIndice]=bCocher
    FIN
    INT_Coche=bCocher	//On récupère la valeur d'avant la boucle
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Bonjour,
    Malgré la bizarrerie du changement de valeur de INT_Coche (l'interrupteur de ta rupture) le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    nDébut	est un entier
    nFin	est un entier
    nIndice	est entier
    bCocher est un booléen
     
    nDébut	= TableIndiceRupture(RUPT_HautClasse)
    nFin	= TableIndiceRupture(RUPT_BasClasse)
    bCocher=INT_Coche	//INT_Coche change de valeur dans la boucle. Pourquoi, mystère, on mémorise sa valeur
    POUR nIndice=nDébut À nFin
    	COL_Coche[nIndice]=bCocher
    FIN
    INT_Coche=bCocher	//On récupère la valeur d'avant la boucle
    Tope merci, j'essaie tout cela et je reviens

  6. #6
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Il va de soit que ce code se place dans "Changement de valeur"
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 86
    Points
    86
    Par défaut
    Merci beaucoup, cela fonctionne relativement bien... sauf lorsque mes ruptures sont en mode repliées ..

    j'ai un interrupteur pour activer/désactiver la sélection de mes lignes

    Nom : Ruptures#3.jpg
Affichages : 147
Taille : 15,4 Ko


    lorsque les ruptures sont repliées, seul le dernier interrupteur peut être activé/désactivé. Je ne sais pas si on peut contourner ce problème autrement qu'en ouvrant une section repliée ...
    Merci beaucoup

  8. #8
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    A la volée, un truc dans le style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    bEtatEnroulé=RUPT_HautClasse..Enroulé
    Si bEtatEnroulé ALORS     //On déroule
        TableDéroule(TABLE_MaTable,IndiceRupture(RUPT_HautClasse),RUPT_HautClasse)
    FIN
    TraiterCoche
    Si bEtatEnroulé ALORS     //On revient à l'état initial
        TableEnroule(TABLE_MaTable,IndiceRupture(RUPT_HautClasse),RUPT_HautClasse)
    FIN
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 86
    Points
    86
    Par défaut
    ah oui, joli l'astuce ...

    Je teste une solution de ce style et reviens pour le résultat
    Merci beaucoup à toi

  10. #10
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    On peut même alléger le code en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    bEtatEnroulé=RUPT_HautClasse..Enroulé
    Si bEtatEnroulé ALORS     //On déroule
        RUPT_HautClasse..Enroulé=Faux
    FIN
    TraiterCoche
    RUPT_HautClasse..Enroulé=bEtatEnroulé
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 170
    Points : 86
    Points
    86
    Par défaut
    Non, je me suis planté dans mes tests, je refais le code adapté à mon tableau ...


    En cliquant sur une coche active dans un entête de rupture, toutes les lignes de ladite rupture prennent l'état de cette dernière.
    En fait, la seule problématique que j'ai est de pouvoir activer/désactiver une coche de l'entête lorsque ces dernières son repliées.

    Nom : Ruptures#4.jpg
Affichages : 126
Taille : 39,2 Ko


    J'essaie donc de déclencher une action sur les événements 'A chaque modification'

    En prenant l'idée de Voroltinquo (merci encore pour ton aide), j'ai bricolé un truc de test comme suit pour voit le comportement :
    j'avais auparavant essayé de déterminer l'indice de rupture sans le test du enroulé/déroulé mais j'obtiens l'indice du dernier élément du tableau .. ?

    Pour rappel, mes ruptures sont enroulées ici ..

    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
    25
    26
    27
    28
    29
    30
    31
    32
    nDébut	est un entier
    nFin	est un entier
    nIndice	est entier
     
     
    IndiceRupture est un entier
    bEtatEnroulé	est un booléen
     
    // ----------------------------------------------------------------
    // On détermine la rupture concernée et on active/désactive la coche
    bEtatEnroulé=RUPT_Matiere..Enroulé
     
    SI bEtatEnroulé ALORS
    	RUPT_Matiere..Enroulé = Faux
    	IndiceRupture = TableIndiceRupture(RUPT_Matiere)
    	SI TABLE_DetailHeuresAbsence[IndiceRupture].INT_Cours.Valeur = 1 ALORS
    		TABLE_DetailHeuresAbsence[IndiceRupture].INT_Cours.Valeur = 0
    	SINON
    		TABLE_DetailHeuresAbsence[IndiceRupture].INT_Cours.Valeur = 1			
    	FIN
    	RUPT_Matiere..Enroulé = Vrai
    FIN
     
    // ---------------------------------------------------
    // on active/désactive toutes les lignes de la rupture
     
    nDébut	= TableIndiceRupture(RUPT_Matiere)
    nFin	= TableIndiceRupture(RUPT_BasRupture2)
     
    POUR nIndice=nDébut À nFin		
    	COL_Selection[nIndice] 	 = TABLE_DetailHeuresAbsence[TableIndiceRupture(RUPT_Matiere)].INT_Cours
    FIN

    le résultat est amusant et étrange ...

    J'ai mis un point d'arrêt à la première instruction de mon code. Donc voici ce qui se passe en cliquant sur l'interrupteur 'Informatique' de l'image ci-dessous avant que mon code ne soit effectué :
    Nom : Ruptures#5.jpg
Affichages : 121
Taille : 108,7 Ko

    c'est le premier élément de ma liste qui vient activé !!
    Ensuite, le code ci-dessus s'exécute et voici le résultat final :

    Nom : Ruptures#6.jpg
Affichages : 127
Taille : 47,5 Ko


    le code fonctionne donc bien mais pourquoi l'interrupteur de la première ligne s'active également !?! grrrr ... surtout que tout se passe bien si les ruptures sont dépliées !!

Discussions similaires

  1. [JSF]Cocher toutes les checkbox d'une colonne
    Par Shivan dans le forum JSF
    Réponses: 6
    Dernier message: 14/07/2009, 19h09
  2. [checkbox] Code pour cocher toutes les cases
    Par snakejl dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 02/06/2006, 09h36
  3. Les fichiers .INI, lire toutes les informations d'une section
    Par echap2000 dans le forum C++Builder
    Réponses: 9
    Dernier message: 15/05/2006, 12h14
  4. cocher toutes les cases à cocher
    Par philippe123 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/09/2005, 18h13
  5. [VB.NET] Datagrid + CheckBox : Cocher toutes les cases
    Par sirex007 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 24/05/2004, 15h33

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