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

C# Discussion :

Contrôles qui ne se rechargent pas.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de mathisdu42
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2013
    Messages : 168
    Par défaut Contrôles qui ne se rechargent pas.
    Bonjour, bonsoir à tous,

    Aujourd'hui j'ouvre ce sujet concernant un petit soucis au niveau d'un formulaire en C#. J'ai donc récemment crée un système de Ticket sur mon application qui répertorie tout les tickets que l'utilisateur à crée. J'y est ajouté une petite fonction qui consiste à supprimer un ticket quand on le souhaite (y compris dans la BDD). Jusque là tout va bien, mon problème ce centre au niveau du "Rafraîchissement" des contrôles. Je m'explique, je souhaite supprimer un Ticket car celui-ci ne m'est plus utile, je le supprime, une fois le Ticket supprimé j'aimerai que les contrôles se rafraîchissent et que la Form prenne en compte la suppression du Ticket, j'ai donc demandé quelques conseils et on ma conseillé d'utiliser l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    container.Controls.Clear();
    et de l'appliquer au début de la fonction qui permet de récupérer les Tickets de la BDD, voici mon problème en image :

    Je souhaite supprimer mon ticket :

    Nom : 1.png
Affichages : 207
Taille : 9,6 Ko

    J'entre l'ID du ticket que je souhaite supprimer :

    Nom : 2.png
Affichages : 150
Taille : 9,1 Ko

    Une fois supprimé, on ouvre de nouveau le formulaire :

    Nom : 3.png
Affichages : 154
Taille : 4,3 Ko

    On peux voir que lorsqu'on lance de nouveau le formulaire, tout les controls ont disparus alors que normalement, vu qu'on vient de supprimer le dernier ticket, voici ce qu'il devrait s'afficher : (aussi, si je redémarre l'application et que je lance la Form, les controls réapparaissent)

    Nom : 4.png
Affichages : 234
Taille : 7,8 Ko


    Je tiens à préciser que lorsqu'il y a plusieurs tickets (exemple 3) et qu'on en supprime 1, l'erreur ne se produit PAS.

    Merci,
    Cordialement.

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    La méthode suivante ne doit absolument pas être utilisée puisque, comme tu l'as constatés, ça supprime tous les contrôles sur ton form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    container.Controls.Clear();
    Au regards de l'interface de ton programme je suppose que tu utilises un un contrôle datagridview lié à ta BDD ??

    Si c'est le cas alors il faut :

    - Supprimer l'entrée dans ta BDD suivant l'ID (je pense que ca tu le fais déjà ....)
    - Supprimer la Row de ton DGV (DataGridView) qui contient l'ID (en affichage)

    NB : Après je ne sais pas comment est lié la vue au contrôleur....donc je ne fais que proposer des idées pour le moment.....

    Le cas échéant il faut nous dire quel contrôle tu utilises exactement (celui dans lequel tu charges les tickets) !

    ++

  3. #3
    Membre confirmé Avatar de mathisdu42
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2013
    Messages : 168
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    Bonsoir,

    La méthode suivante ne doit absolument pas être utilisée puisque, comme tu l'as constatés, ça supprime tous les contrôles sur ton form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    container.Controls.Clear();
    Au regards de l'interface de ton programme je suppose que tu utilises un un contrôle datagridview lié à ta BDD ??

    Si c'est le cas alors il faut :

    - Supprimer l'entrée dans ta BDD suivant l'ID (je pense que ca tu le fais déjà ....)
    - Supprimer la Row de ton DGV (DataGridView) qui contient l'ID (en affichage)

    NB : Après je ne sais pas comment est lié la vue au contrôleur....donc je ne fais que proposer des idées pour le moment.....

    Le cas échéant il faut nous dire quel contrôle tu utilises exactement (celui dans lequel tu charges les tickets) !

    ++

    Alors oui en effet j'aurais du le préciser, je n'utilise pas de datagridview mais bel et bien des labels dynamiques

    Je pensais que utiliser le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    container.Controls.Clear();
    et le placer au début de la fonction amenait forcément à supprimer les controls puis les charger à la suite étant donné que le Clear se fait juste avant que les labels soient crées.

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par mathisdu42 Voir le message
    Alors oui en effet j'aurais du le préciser, je n'utilise pas de datagridview mais bel et bien des labels dynamiques

    Je pensais que utiliser le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    container.Controls.Clear();
    et le placer au début de la fonction amenait forcément à supprimer les controls puis les charger à la suite étant donné que le Clear se fait juste avant que les labels soient crées.
    Des Labels...???? !!....??? défaut de conception à coups sure ! Il faut utiliser un Listview ou un DataGridView car rien que de penser qu'il te faut recalculer le positionnement à chaque ajout ou suppression c'est difficilement maintenable ton histoire.....

    Et du coups ton Container corresponds à quel genre de contrôle ? Je demande ça car il faut que tu comprennes que container.Controls liste tout tes contrôles de ton "container" pour ensuite les supprimer avec la méthode .Clear !

    ++

  5. #5
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    @wallace1 : c'est moi qui aie indiqué la solution des Label dynamiques, c'est sur quoi on était tombé d'accord avec mathisdu42 sur son précédent post. Perso je vois pas de souci à faire quelques opérations arithmétiques simples pour le positionnement (Win32 POWA ! ). Si tu veux lui proposer une solution à base de DataGridView/binding, je te laisse faire, c'est une méthode que je n'utilise jamais

    @mathisdu42 : à l'époque de ton premier post je t'avais dit que le container pouvait être n'importe quel contrôle, même un Form, mais que je déconseillais cette dernière solution. S'il s'avère que c'est le souci du moment, il te suffit de rajouter un contrôle container dans ton Form qui servira uniquement à contenir tes contrôles dynamiques. Comme ça tout ce qui sera en-dehors de ton container ne sera pas affecté par le clear().

    PS : tu vois que t'as bien fait de poster ta question, t'auras peut-être une autre solution ^^

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Salut,

    @wallace1 : c'est moi qui aie indiqué la solution des Label dynamiques, c'est sur quoi on était tombé d'accord avec mathisdu42 sur son précédent post. Perso je vois pas de souci à faire quelques opérations arithmétiques simples pour le positionnement (Win32 POWA ! ). Si tu veux lui proposer une solution à base de DataGridView/binding, je te laisse faire, c'est une méthode que je n'utilise jamais
    Bonjour,

    @jopopmk : Je ne fais pas de chasse à la sorcière ^^,..... C'est pas tant le repositionnement qui sera laborieux (mais ça tu le sais déjà). Tu sais très bien que lorsqu'on travaille avec une BDD il est tout de même plus adapté d'utiliser un contrôle List que des labels......
    Je ne suis pas là pour donner des solutions clé en main mais pour en proposer certaines adaptées au contexte. Si OP, ne franchie pas le pas pour le DGV et le Binding..... je ne le ferais pas à sa place.

    Quoiqu'il en soit si tu souhaites continuer avec tes labels tu pourrais les glisser dans un contrôle container de type TableLayoutPanel comme ça tu paramètres la propriété Dock=Fill de tes labels et tu pourras aisément parcourir la collection de controls dans le TLP pour virer celui que tu veux. Il faudrait au préalable (= au chargement et/ou la création de tes tickets) définir le N° ID dans la propriété .Tag de chaque Label ainsi tu pourras retrouver celui que tu souhaites supprimer grâce à l'ID stocké dans .Tag.

    A+

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/04/2010, 12h02
  2. Animation flash qui ne se recharge pas avec Firefox
    Par belllangelo dans le forum Flash
    Réponses: 0
    Dernier message: 14/10/2009, 09h59
  3. Contrôle qui ne s'affiche pas
    Par jason69 dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 25/07/2007, 19h18
  4. [VBA-E] Fonction qui ne se recharge pas
    Par iupien78 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/01/2007, 21h23
  5. [VB.NET]Contrôle qui ne s'affiche pas
    Par Bleuarff dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/08/2006, 20h07

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