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

C# Discussion :

[Reflection ?] liaison entre nom d'un champs et propriété d'une classe


Sujet :

C#

  1. #1
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut [Reflection ?] liaison entre nom d'un champs et propriété d'une classe


    Je dois afficher un rapport sur le nombre d'activité renseigné par un utilisateur classé par jour et type d'activité.

    Actuellement, j'ai une classe regroupant une List<typeActivity> et une classe typeActivity ou je définis les différentes activités

    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
    34
    35
    36
    37
    38
    39
     
       public class dsActivityReportUK2 : dsActivityReport
        {
            public List<typeActivityReportUK2> FirstAppointment { get; set; }
            public List<typeActivityReportUK2> SiteAssessment { get; set; }
            public List<typeActivityReportUK2> PrintAudit { get; set; }
            public List<typeActivityReportUK2> Validation { get; set; }
            public List<typeActivityReportUK2> FinalAppointment { get; set; }
            public List<typeActivityReportUK2> DecisionAppointment { get; set; }
            public List<typeActivityReportUK2> DecisionCall { get; set; }
            public List<typeActivityReportUK2> CustomerCare { get; set; }
            public List<typeActivityReportUK2> Sold { get; set; }
            public List<typeActivityReportUK2> ToContact { get; set; } 
     
            public dsActivityReportUK2()
            {
             FirstAppointment = new List<typeActivityReportUK2>();
             SiteAssessment= new List<typeActivityReportUK2>();
             PrintAudit = new List<typeActivityReportUK2>();
             Validation = new List<typeActivityReportUK2>();
             FinalAppointment = new List<typeActivityReportUK2>();
             DecisionAppointment = new List<typeActivityReportUK2>();
             DecisionCall = new List<typeActivityReportUK2>();
             CustomerCare= new List<typeActivityReportUK2>();
             Sold = new List<typeActivityReportUK2>();
             ToContact = new List<typeActivityReportUK2>();
            }
        }
     
        public class typeActivityReportUK2 : typeActivityReport
        {
            public bool Booked { get; set; }
            public bool Cancelled { get; set; }
            public bool Completed { get; set; }
            public bool Negative { get; set; }
            public bool ToContact { get; set; }
     
            public bool OPA { get; set; }
        }
    Cela me permet d'inclure directement dans un Repeater le nombre d'activité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                <td>
                    <asp:LinkButton ID="LinknbFirstAppointmentCancelled1" CommandName="LinkActivity"
                        OnCommand="Link_Click" CommandArgument="<%# GetActivityIdFiltered(((dsActivityReportUK2)Container.DataItem).FirstAppointment, ty => ty.Cancelled == true) %>"
                        runat="server">
    					<%# GetFilteredResult(((dsActivityReportUK2)Container.DataItem).FirstAppointment, ty => ty.Cancelled == true) %>
                    </asp:LinkButton>
                </td>
    Cela m'a permis de creer des méthodes générique pour tous les pays (disposant chacun de type d'activité différentes).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            public string GetFilteredResult<T>(List<T> lst, Func<T, bool> func)
            {
                if (lst == null)
                    return String.Empty;
     
                string s = lst.Where(func).Count().ToString();
                //if (s == "0")
                //    return String.Empty;
                //else
                return s;
            }
    Du coté base de données, j'ai un service qui me ramène un DataSet avec une requête filtré sur l'utilisateur et une plage de date.

    Mon problème, est que j'aimerais rendre aussi le Service le plus générique possible afin d'utiliser 1 méthode pour tous les pays et non créér une méthode par pays (la requête ramène depuis les mêmes tables, c'est juste l'affectation dans les classes qui change).

    Avec le nom du type de l'activité (FirstAppointmentBooked par ex.), cela me définisse ma classe typeActivityReport automatiquement.

    Est ce possible ?

    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
    34
    35
    36
    37
    38
     
                    switch (activityReport.activityType)
                    {
                        case 206:  /*FirstAppointmentBooked*/ { activityReport.Booked = true; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.FirstAppointment.Add(activityReport); break; }
                        case 207:  /*FirstAppointmentCancelled*/ { activityReport.Booked = false; activityReport.Cancelled = true; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.FirstAppointment.Add(activityReport); break; }
                        case 208:  /*FirstAppointmentCompleted*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = true; activityReport.Negative = false; activityReport.ToContact = false; lst.FirstAppointment.Add(activityReport); break; }
                        case 209:  /*FirstAppointmentNegative*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = true; activityReport.ToContact = false; lst.FirstAppointment.Add(activityReport); break; }
                        case 210:  /*SiteAssessmentBooked*/ { activityReport.Booked = true; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.SiteAssessment.Add(activityReport); break; }
                        case 211:  /*SiteAssessmentCompleted*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = true; activityReport.Negative = false; activityReport.ToContact = false; lst.SiteAssessment.Add(activityReport); break; }
                        case 212:  /*PrintAuditBooked*/ { activityReport.Booked = true; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.PrintAudit.Add(activityReport); break; }
                        case 213:  /*PrintAuditCompleted*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = true; activityReport.Negative = false; activityReport.ToContact = false; lst.PrintAudit.Add(activityReport); break; }
                        case 214:  /*ValidationBooked*/ { activityReport.Booked = true; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.Validation.Add(activityReport); break; }
                        case 215:  /*ValidationCompleted*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = true; activityReport.Negative = false; activityReport.ToContact = false; lst.Validation.Add(activityReport); break; }
                        case 216:  /*ValidationNegative*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = true; activityReport.ToContact = false; lst.Validation.Add(activityReport); break; }
                        case 217:  /*FinalAppointmentBooked*/ { activityReport.Booked = true; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.FinalAppointment.Add(activityReport); break; }
                        case 218:  /*FinalAppointmentCompleted*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = true; activityReport.Negative = false; activityReport.ToContact = false; lst.FinalAppointment.Add(activityReport); break; }
                        case 219:  /*FinalAppointmentNegative*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = true; activityReport.ToContact = false; lst.FinalAppointment.Add(activityReport); break; }
                        case 220:  /*DecisionAppointmentBooked*/ { activityReport.Booked = true; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.DecisionAppointment.Add(activityReport); break; }
                        case 221:  /*DecisionAppointmentCompleted*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = true; activityReport.Negative = false; activityReport.ToContact = false; lst.DecisionAppointment.Add(activityReport); break; }
                        case 222:  /*DecisionAppointmentNegative*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = true; activityReport.ToContact = false; lst.DecisionAppointment.Add(activityReport); break; }
                        case 223:  /*DecisionCallBooked*/ { activityReport.Booked = true; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.DecisionCall.Add(activityReport); break; }
                        case 224:  /*DecisionCallCompleted*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = true; activityReport.Negative = false; activityReport.ToContact = false; lst.DecisionCall.Add(activityReport); break; }
                        case 225:  /*DecisionCallNegative*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = true; activityReport.ToContact = false; lst.DecisionCall.Add(activityReport); break; }
                        case 226:  /*Sold*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.Sold.Add(activityReport); break; }
                        case 227:  /*Tocontact*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.ToContact.Add(activityReport); break; }
                        case 228:  /*ToContactforSite*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = true; lst.SiteAssessment.Add(activityReport); break; }
                        case 229:  /*SiteAssessmentCancelled*/ { activityReport.Booked = false; activityReport.Cancelled = true; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.SiteAssessment.Add(activityReport); break; }
                        case 230:  /*SiteAssessmentNegative*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = true; activityReport.ToContact = false; lst.SiteAssessment.Add(activityReport); break; }
                        case 231:  /*ToContactforPrint*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = true; lst.PrintAudit.Add(activityReport); break; }
                        case 232:  /*PrintAuditCancelled*/ { activityReport.Booked = false; activityReport.Cancelled = true; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.PrintAudit.Add(activityReport); break; }
                        case 233:  /*PrintAuditNegative*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = true; activityReport.ToContact = false; lst.PrintAudit.Add(activityReport); break; }
                        case 234:  /*ToContactforValidation*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = true; lst.Validation.Add(activityReport); break; }
                        case 235:  /*ValidationCancelled*/ { activityReport.Booked = false; activityReport.Cancelled = true; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.Validation.Add(activityReport); break; }
                        case 236:  /*ToContactforFinal*/ { activityReport.Booked = false; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = true; lst.FinalAppointment.Add(activityReport); break; }
                        case 237:  /*FinalAppointmentCancelled*/ { activityReport.Booked = false; activityReport.Cancelled = true; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.FinalAppointment.Add(activityReport); break; }
                        case 238:  /*DecisionAppointmentCancelled*/ { activityReport.Booked = false; activityReport.Cancelled = true; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.DecisionAppointment.Add(activityReport); break; }
                        case 239:  /*CustomerCareBooked*/ { activityReport.Booked = true; activityReport.Cancelled = false; activityReport.Completed = false; activityReport.Negative = false; activityReport.ToContact = false; lst.CustomerCare.Add(activityReport); break; }
                    }

  2. #2
    Membre confirmé Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Points : 527
    Points
    527
    Par défaut
    Bonjour,

    J'avoue que je ne comprend pas trop la problématique.
    Tu veux faire un cast dynamique ?

  3. #3
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Points : 1 561
    Points
    1 561
    Par défaut
    J'ai pas tout compris non plus mais apparemment dans ta classe typeActivityReport il y a toujours qu'un des 5 premiers booléens qui est à true, donc une énumération serait peut-être plus pratique, non ?

    Genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    enum Etat {Booked,Cancelled,Completed,Negative,ToContact};
    enum ActivityName {FirstAppointmentBooked, FirstAppointmentCancelled, etc...};
     
    struct activityType
    {
      public ActivityName activity_name;
      public Etat etat;
    }
    Ensuite t'as le ToString() ou le enum.Parse() dans l'autre sens qui pourront peut-être t'aider.

  4. #4
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut
    Oui, il est vrai que je pourrai utiliser un enum pour le type d'activité, sauf que le dernier bloc de code à été généré via Excel et copié collé dans le .cs

    Ce que je souhaite c'est que mon champ qui revient de la DB qui aura la propriété row["activity_name"] = "FirstAppointmentBooked" me rajoute automatiquement dans la liste FirstAppointment, 1 typeActivityReportUK2 où Booked = true (ou bien Booked venant d'une enum).

    Ceci afin de n'avoir à rajouter qu'une ligne dans ma classe et une colonne dans ma DB lors de changement de type d'activité. Et de ne plus avoir à refaire le bind entre la classe et le resultat de ma requête à chaque fois.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/07/2014, 11h17
  2. liaison entre nom de domaine et hébergement
    Par Yepazix dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 10/02/2014, 02h20
  3. Réponses: 6
    Dernier message: 24/05/2013, 16h25
  4. Réponses: 5
    Dernier message: 08/10/2012, 14h38
  5. Réponses: 4
    Dernier message: 28/01/2010, 21h07

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