Button id [Résolu]

Messages postés
24
Date d'inscription
jeudi 1 janvier 2015
Dernière intervention
23 août 2015
- - Dernière réponse : Whismeril
Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
- 8 janv. 2015 à 20:30
Bonjour,
j'ai une liste de boutons dans mon website form asp.net c#..chaque bouton correspond à une date spécifique...est ce qu'y on a une méthode pour éviter l'utilisation des if else ...mon code est le suivant:
if(date_debut == "12:30")
{ B12_3.backcolor=System.Drawing.Color.Red;
  if (date_fin == "13:30")
   B13_0.backcolor = System.Drawing.color.Red;
  else { if(date_fin =="14:00")
           {B13_0.backcolor = System.Drawing.color.Red;
             B13_3.backcolor = System.Drawing.color.Red;
            }
....
   }

) et ainsi de suite pour chaque chaque date_debut je veux tester les date fins et colorier tous les boutons dans l'interval [date_debut ; date_fin ]..les heures sont :12:00 , 12:30 , 13:00 , 13:30 ....23:00, 23:30,24:00, 24:30
je voudrais une méthode qui évite d'utiliser les if else car c'est trop!!!!...j'ai pensé de faire une boucle mais comment je peux écrire les id du boutons correspondantes sans répéter chaque fois l'instruction pour chaque bouton...est ce que je peux faire une concatenation : B + "heure_min" ....s'il vous plait
me repondez....merciiiiii beaucouppp
Afficher la suite 

Votre réponse

2 réponses

Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
0
Merci
Bonsoir pour répondre "bêtement" à ta question, il y a l'instruction swicth

swicth(date_debut)
{
     case "12:30":
          B12_3.backcolor=System.Drawing.Color.Red;
          break;


    case "13:30"
          B13_0.backcolor = System.Drawing.color.Red;
          break;

    //.......

}


mais ça n'est pas forcément le plus judicieux.
Je ne fais pas d'ASP, donc voici une piste basée sur winform, à chaque événement l'objet sender est accessible dans la méthode abonnée. Cet objet retourne un "pointeur" vers l'objet ou contrôle qui déclenche l'événement. Ça évite de se servir d'un string qui pourrait évoluer (12:30 pourrait devenir 12h30 par exemple...).

Une autre piste, basée elle sur le WPF (je débute), il existe des triggers qui servent entre autre à changer une couleur de fond de bordure ou de police en fonction d'une valeur, ASP.Net possède peut être aussi ce type de possibilité.


Un autre point, je te déconseille d'utiliser des string pour gérer des heures ou des durées, il y a les types DateTime et TimeSpan pour ça.
zuzu123
Messages postés
24
Date d'inscription
jeudi 1 janvier 2015
Dernière intervention
23 août 2015
-
j'ai essayé bien sûr le switch mais ça ne marche pas avec un string en c# .... oui j'utilise le TimeSpan pour gérer des heures mais l'id des boutons est un string....j'ai trouvé une solution qui a évitée toute if else : j'ai fait un tableau de boutons qui correspond aux id et comme ça j'ai géré les backcolor de bouton....merci pour votre réponse
Whismeril
Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
> zuzu123
Messages postés
24
Date d'inscription
jeudi 1 janvier 2015
Dernière intervention
23 août 2015
-
mais ça ne marche pas avec un string en c#
si si.
Pas avec le timeSpan, mais avec un string ou un int si
zuzu123
Messages postés
24
Date d'inscription
jeudi 1 janvier 2015
Dernière intervention
23 août 2015
-
je l'ai essayé avec un string il me donne erreur...
Whismeril
Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
> zuzu123
Messages postés
24
Date d'inscription
jeudi 1 janvier 2015
Dernière intervention
23 août 2015
-
Quelle erreur?
Montre le code que tu as essayé. Précise la ligne et s'il y a des variables leur contenu.
Commenter la réponse de Whismeril
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
0
Merci
Bonjour,

pour moi comme ca c'est le plus facile, mais il faut connaitre un peu de Linq.


je place les dates possibles dans une collection et je cherche les bonnes, la clef est le nom du control.

// par exemple
        DateTime date_debut = new DateTime(2015, 1, 1, 12, 30, 0);
        DateTime date_fin = new DateTime(2015, 1, 1, 15, 30, 0);

        Dictionary<string, DateTime> dic = new Dictionary<string, DateTime>();
        for (int i = 0; i < 23; i++) {
            for (int j = 0; j < 2; j++) {
                dic.Add(string.Format("B{0}_{1:00}", i, j * 30), new DateTime(2015, 1, 1, i, j * 30, 0));
            }
        }

        foreach (var item in dic.Select(p => p).Where(z => z.Value < date_fin && z.Value >= date_debut)) {
            Button bt = (Button)Page.FindControl(item.Key);
            if (bt != null) {
                bt.BackColor = System.Drawing.Color.Red;
            }

        }



plus simple encore sans collection et sans Linq

// par exemple
        DateTime date_debut = new DateTime(2015, 1, 1, 12, 30, 0);
        DateTime date_fin = new DateTime(2015, 1, 1, 15, 30, 0);

        for (int i = 0; i < 23; i++) {
            for (int j = 0; j < 2; j++) {
                string Clef = string.Format("B{0}_{1:00}", i, j * 30);
                DateTime LaDate = new DateTime(2015, 1, 1, i, j * 30, 0);
                if (LaDate < date_fin && LaDate >= date_debut) {
                    Button bt = (Button)Page.FindControl(Clef);
                    if (bt != null) {
                        bt.BackColor = System.Drawing.Color.Red;
                    }
                }
            }
        }


Attention dans les deux cas je considere que les controles sont avec 1 ou 2 digits pour les heures et 2 digits pour les minutes

bonne journée

Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
zuzu123
Messages postés
24
Date d'inscription
jeudi 1 janvier 2015
Dernière intervention
23 août 2015
-
merci beaucoup pour votre réponse...oui j'ai utilisé la 2 éme méthode..bonne journée
Commenter la réponse de cgandco

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.