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 !