Button id [Résolu]

zuzu123 24 Messages postés jeudi 1 janvier 2015Date d'inscription 23 août 2015 Dernière intervention - 6 janv. 2015 à 17:49 - Dernière réponse : Whismeril 12105 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention
- 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

7 réponses

Whismeril 12105 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention - 6 janv. 2015 à 20:18
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 24 Messages postés jeudi 1 janvier 2015Date d'inscription 23 août 2015 Dernière intervention - 8 janv. 2015 à 17:09
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 12105 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention > zuzu123 24 Messages postés jeudi 1 janvier 2015Date d'inscription 23 août 2015 Dernière intervention - 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
zuzu123 24 Messages postés jeudi 1 janvier 2015Date d'inscription 23 août 2015 Dernière intervention - 8 janv. 2015 à 20:27
je l'ai essayé avec un string il me donne erreur...
Whismeril 12105 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention > zuzu123 24 Messages postés jeudi 1 janvier 2015Date d'inscription 23 août 2015 Dernière intervention - 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.
Commenter la réponse de Whismeril
cgandco 219 Messages postés mercredi 26 octobre 2011Date d'inscription 22 juin 2017 Dernière intervention - Modifié par cgandco le 8/01/2015 à 15:27
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 24 Messages postés jeudi 1 janvier 2015Date d'inscription 23 août 2015 Dernière intervention - 8 janv. 2015 à 17:11
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.