2012-05-31 5 views
1

Ok donc j'ai 3 classes différentes (types d'événements rl) Chaque événement a des propriétés différentesrendu différents types d'événements C#

exemple est classe natation qui a la température, la valeur du pH, la longueur de la natation et ainsi de suite suivant event est Cycling class qui a Biketype, la largeur du pneu et ainsi de suite

Maintenant, les événements ont tous une date, et je veux les rendre triés par date dans une liste.

Maintenant, chaque classe doit être rendue différemment selon la conception, donc je suis un peu confus quant à la façon dont je devrais résoudre cela?

réfléchissait à la création d'une liste d'objets et en faisant passer TOUS les événements de tous types dans la liste trier par date ,, itérer puis dans la liste et sur la base de ce type d'objet que je reçois, se lient à la usercontrol et le rendre ..

est-ce la meilleure façon de faire cela? ou y a-t-il une approche plus simple?

+1

Tout d'abord, est-ce que ces devoirs sont faits? Deuxièmement, que voulez-vous dire par rendu, voulez-vous dire affiché sur l'écran, cherchez-vous une vue de table, comme une vue de données, qui affichera toutes les classes dans l'ordre chronologique? –

+0

Créez une interface que toutes vos classes implémentent avec une propriété date. Vous pouvez ensuite créer une liste fortement typée de ce type d'interface pour les stocker. –

Répondre

0

Oui, c'est une bonne approche.

Mais essayez d'éviter de rendre les contrôles vous-même. Ajoutez-les à la collection Controls d'un contrôle de conteneur parent. Asp.net rendra les contrôles lui-même de cette façon.

0

Créez une classe qui contient un horodatage puis d'autres classes basées dessus. Ensuite, vous pouvez créer une liste de la classe de base, et lancer les objets à la classe étendue et les utiliser. Voici un exemple de travail

Modifier Wow je me confondre avec cela, pas sûr comment expliquer si s'il vous plaît demander pour plus de clarté, et je ferai de mon mieux

public Form1() 
    { 
     InitializeComponent(); 
     List<Sport> Sports = new List<Sport>(); 
     //create a swim object and give it some data 
     Swimming swim1 = new Swimming(); 
     //create a cycle object and give it some data 
     Cycling cycle1 = new Cycling(); 
     swim1.PH = 5; 
     cycle1.BikeType = 2; 
     // add the two objects to a list of base class 
     Sports.Add(swim1); 
     Sports.Add(cycle1); 

     //iterate through the list of base class and cast the objects to their extended class 
     //display a independent property of each just to prive it works. 
     foreach (Sport s in Sports) 
     { 
      if (s is Cycling) 
      { 
       MessageBox.Show(((Cycling)s).BikeType.ToString()); 
      } 
      else if (s is Swimming) 
      { 
       MessageBox.Show(((Swimming)s).PH.ToString()); 
      } 

     } 
    } 
} 

class Sport 
{ 
    DateTime DateAndTime = new DateTime(); 
} 
class Swimming : Sport 
{ 
    public int PH = 0; 
    public int temperature = 0; 
} 
class Cycling : Sport 
{ 
    public int BikeType = 1; 
    public int TireSize = 26; 
} 
1

Créer une classe de base tout les événements dérivent de. Cette classe de base doit avoir une méthode public virtual appelée Render et la zone DateTime.

Dérivez toutes les classes d'événements de cette classe et remplacez la méthode Render, afin que chaque classe d'événements puisse "se rendre".

Tout ce que vous devez faire est de garder une liste d'instances de la classe de base ordonnée par horodatage et d'appeler Render.

Exemple:

public class BaseEvent 
{ 
    public DateTime TimeStamp; 

    public virtual void Render() { } 
} 

public class Swimming : BaseEvent 
{ 
    public override void Render() 
    { 
     // Code to render a Swimming instance 
    } 
} 

public class Cycling: BaseEvent 
{ 
    public override void Render() 
    { 
     // Code to render a Cycling instance 
    } 
} 

La liste de garder une trace de tous les événements:

private List<BaseEvent> m_events; 

Rendu tous les événements:

foreach (BaseEvent e in m_events) 
    e.Render(); 
0

Presque comme la solution de Thorsten Dittmar, mais si vous liez votre liste à un contrôle tel que GridView alors vous n'avez pas besoin de se soucier de la méthode Render().Au lieu de cela:

1) Déclarez une nouvelle ENUM:

public enum EventType {Swimming, Cycling, etc} 

2) passer la valeur ENUM à la base comme dans la déclaration de classe

public class Cycling: BaseEvent 

    { 
     public Cycling() : base(EventValue.Swimming) 
    } 

3) Ajouter constructeur au BaseEvent, ajoutez également la propriété de l'événement

public class BaseEvent 
{ 
    public BaseEvent(EventType type) 
    { 
     Event = type; 
    } 

    EventType Event { get; set; } 
    DateTime EventDate .... 
} 

4) lier ensuite une liste de type List<BaseEvent> à votre contrôle et dans le OnIt L'événement emDataBound rend ce que vous voulez, basé sur la valeur de la propriété Event

Questions connexes