vale_ail 22 febbraio alle 15:23
Salve a tutti,
ho un mini progetto "di test", questo il codice:
public abstract class PdaItem
{
public PdaItem(string name)
{
Name = name;
}
public PdaItem() { }
public virtual string Name { get; set; }
//metodi astratti
public abstract string GetSummary();
public abstract List<PdaItem> Caricati();
}
//classe Contact deriva da PdaItem
public class Contact : PdaItem
{
//faccio override della proprietà ereditata dalla classe madre
public override string Name
{
get
{
return FirstName + " " + LastName;
}
set
{
string[] names = value.Split(' ');
// Error handling not shown.
FirstName = names[0];
LastName = names[1];
}
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public Contact(string name)
: base(name)
{
Name = name;
}
public Contact() {}
public override string GetSummary()
{
return string.Format("FirstName: {0}"+ "LastName: {1}"+ "Address: {2}", FirstName,LastName, Address );
}
public override List<PdaItem> Caricati()
{
List<PdaItem> p = new List<PdaItem>();
p.Add(new Contact("CONTATTO X ORD"));
p.Add(new Contact("CONTATTO X URG"));
p.Add(new Contact("CONTATTO X GDP"));
return p;
}
}//fine classe
//classe Appuntamento deriva da PdaItem --Per test
public class Appointment : PdaItem
{
public Appointment() { } //costruttore senza argomenti per //collegarlo alla ODS
public Appointment(string name)
: base(name)
{
Name = name;
}
public Appointment(string name,DateTime inizio, DateTime fine, string luogo )
: base(name)
{
this.StartDateTime = inizio;
this.EndDateTime = fine;
this.Location = luogo;
}
public DateTime StartDateTime { get; set; }
public DateTime EndDateTime { get; set; }
public string Location { get; set; }
public override string GetSummary()
{
return string.Format(
"Subject: {0}" + Environment.NewLine
+ "Start: {1}" + Environment.NewLine
+ "End: {2}" + Environment.NewLine
+ "Location: {3}", Name, StartDateTime, EndDateTime, Location);
}
//METODO DI TEST
public override List<PdaItem> Caricati()
{
List<PdaItem> p = new List<PdaItem>();
p.Add(new Appointment("APPUNTAMENTO X ORD"));
p.Add(new Appointment("APPUNTAMENTO X URG", new DateTime(2008, 7, 18), new DateTime(2008, 7, 19),"Stadio"));
p.Add(new Appointment("APPUNTAMENTO Appuntamento X GDP", new DateTime(2012, 6, 4), new DateTime(2012, 6, 4), "Compleanno"));
p.Add(new Contact("CONTATTO X ORD"));
p.Add(new Contact("CONTATTO X URG"));
p.Add(new Contact("CONTATTO X GDP"));
return p;
}
Nel metodo Caricati, definito ad esempio nella classe Appointment, simulo una connessione al db per recuperare un elenco di contatti e appuntamenti. Come si vede dal codice sopra, entrambe le classi derivano da PdaItem, e contengono proprietà specifiche, ad esempio Appointment ha data inizio ecc.
Ora vorrei in una webform una GridView che mi visualizzi questo elenco:
aggiungo una ODS, e dall'elenco delle classi disponibili al collegamento trovo solo Contact e Appointment.
Scelgo di collegarmi alla Appointment, imposto la proprietà TypeName a bjectModel.Appointment e il metodo Select a Caricati.
Aggiungo una Gridview, la collego all'ODS e noto che il campo che viene visualizzato è l'unico campo Name della classe astratta.
Eseguendo il codice, la pagina viene caricata correttamente ma vedo solo quel campo.
Per controprova, se aggiungo un ulteriore campo alla classe astratta e ricreo la gridview, vedo oltre al campo Name anche quest'ultimo, quindi il controllo ODS è in qualche modo "collegato" alla classe astratta. Ora, d'accordo che il metodo Caricati restituisce una lista di PdaItem, però la TypeName fa riferimento ad Appointment...non dovrebbe essere quest'ultimo a comandare?
L'idea era questa cmq: vorrei che nella griglia comparissero i campi dell'entità Appointment quando viene recuperato dal db un appuntamento e i campi dell'entità Contact quando viene recuperato un contatto...è fattibile?
Grazie!