Button id

Résolu
zuzu123 Messages postés 24 Date d'inscription jeudi 1 janvier 2015 Statut Membre Dernière intervention 23 août 2015 - 6 janv. 2015 à 17:49
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 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

2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
6 janv. 2015 à 20:18
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.
0
zuzu123 Messages postés 24 Date d'inscription jeudi 1 janvier 2015 Statut Membre Dernière intervention 23 août 2015
Modifié par zuzu123 le 8/01/2015 à 17:13
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
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656 > zuzu123 Messages postés 24 Date d'inscription jeudi 1 janvier 2015 Statut Membre Dernière intervention 23 août 2015
8 janv. 2015 à 19:02
mais ça ne marche pas avec un string en c#
si si.
Pas avec le timeSpan, mais avec un string ou un int si
0
zuzu123 Messages postés 24 Date d'inscription jeudi 1 janvier 2015 Statut Membre Dernière intervention 23 août 2015
8 janv. 2015 à 20:27
je l'ai essayé avec un string il me donne erreur...
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656 > zuzu123 Messages postés 24 Date d'inscription jeudi 1 janvier 2015 Statut Membre Dernière intervention 23 août 2015
8 janv. 2015 à 20:30
Quelle erreur?
Montre le code que tu as essayé. Précise la ligne et s'il y a des variables leur contenu.
0
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9
Modifié par cgandco le 8/01/2015 à 15:27
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.
0
zuzu123 Messages postés 24 Date d'inscription jeudi 1 janvier 2015 Statut Membre Dernière intervention 23 août 2015
8 janv. 2015 à 17:11
merci beaucoup pour votre réponse...oui j'ai utilisé la 2 éme méthode..bonne journée
0
Rejoignez-nous