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

ASP.NET Discussion :

Rendre un bouton Enabled/Disabled "dynamiquement"


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 90
    Par défaut Rendre un bouton Enabled/Disabled "dynamiquement"
    Bonjour, j'espere poster au bon endroit
    J'aurais besoin de vos lumières concernant la modification de l'état d'un bouton.
    J'ai une gridview, un bouton "Calculer Propositions" .

    Quand on clique sur le bouton, ca lance une méthode qui boucle sur plusieurs appels en base.

    Mon probleme est qu'il est possible que le traitement d'un appel dure un certain temps au risque de voir l'utilisateur cliquer encore une fois sur le bouton. Biensur, Il y a incrementation pour l'iteration une fois que la procedure stockée a fini de calculer, mais pendant ce temps, le bouton reste "cliquable".

    Donc, j'aimerais pouvoir mettre le bouton sur enabled=false, que le traitement se fasse puis le remettre sur True.

    Dans le code j'ai bien enabled=false des qu'on clique, puis True des que la methode est fini, mais ca ne change rien.

    J'ai bien sur, fait appel a ma methode display() qui actualise juste apres avoir mis enabled=false, mais rien n'y fait. L'impression que j'en ai, (enfin d'apres ce que je vois quand je pose des points d'arrets) c'est qu'il ne fait pas d'actualisation en cours d'une methode, il la fait qu'en derniere, une fois que tout le reste est passé.

    Voici, le code :
    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
    33
      protected void btnCalculerProposition(object sender, EventArgs e)
            {
     
     
                PropositionComputing(true);
                this.Display(); //ACTUALISATION
     
    		}
     
     protected void PropositionComputing(bool do_it)
            {
     
    			if(do_it)
                {
     
                    //ici j'avais essaye faire ca : this.btnCalculProposition.Enabled = false;
                    GlTerrainController cont = new GlTerrainController();
                    foreach (GridViewRow row in grdObjectifMagasin.Rows)
                    {
                        int? idObjectifMagasin = null;
     
                        HiddenField hf = row.FindControl("hdf_gl_objectifs_magasins_id") as HiddenField;
                        if (hf.Value.Length > 0)
                        {
                            idObjectifMagasin = int.Parse(hf.Value);
                            cont.Calcul_Proposition_Objectif(idObjectifMagasin); //APPEL A LA BASE
     
                        }
     
                    }
                    //ici j'avais essayé faire ca : this.btnCalculProposition.Enabled = true;
                }
            }

    Ou bien, n'y a t il pas un moyen, le plus simple possible :-), de figer l'écran tant que toutes les itérations ne sont pas passées ?.

    En fait, ce qui m'intéresse vraiment, ce serait que lorsque l'utilisateur clique sur le bouton, l'appli lance ses appels en base et ne rende la main a l'utilisateur QUE lorsque TOUTES les iterations sont passées.

    J'avoue m'arracher les cheveux la dessus, je débute en C#, donc peut être qu'il me manque encore des billes pour tout comprendre...

    Merci beaucoup !

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Par défaut
    Effectivement je viens de faire le test et bien que le bouton apparait à l'écran comme inactif, il reste réceptif quand on clique dessus, ce qui fait qu'en fin de traitement l'événement est tout de même déclenché !

    Je pense que ca vient du fait que l'eventhandler s'exécute dans un thread séparé, du coup au moment où on reclique l'état du bouton dans le thread principal est toujours actif, son statut n'étant mis à jour qu'une fois le traitement terminé.

    Par contre je ne suis pas encore assez calé en gestion des événements pour savoir comment contourner ce problème.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 90
    Par défaut
    Merci, au moins je suis pas fou, on est au moins deux a constater la même chose.

    Bon j'espère qu'une âme charitable pourra répondre . . .


    Peut etre du java script ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Par défaut
    Je ne sais pas si ca va faire avancer le schmilblick mais il y a exactement le même problème avec VB6

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 90
    Par défaut
    Je trouve ca étrange qu'il n'y ait pas de solution, car c'est le genre de trucs qui doit souvent être requis dans les applis
    Please, help !!!! j'ai plus beaucoup de cheveux a force de me les arracher !!!!!

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Salut,

    euh c'est de l'ASPNET ? j'ai vu un HiddenField c'est pour ça.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Par défaut
    Encore plus fort : en remplaçant .Enabled = false par .Visible = false et en cliquant là où est supposé se trouver le bouton, l'événement Click se déclenche également !

    La seule solution que je vois est de masquer carrément la feuille pendant la durée du traitement...

Discussions similaires

  1. rendre un champ enable/disable
    Par Edta dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 21/08/2009, 15h17
  2. Rendre un bouton disabled (deux actions sur le même bouton)
    Par beegees dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/11/2008, 10h46
  3. [xsl]simuler le mecanisme OO de "liaison dynamique"
    Par philemon_siclone dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 19/12/2003, 11h34

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