2017-11-01 14 views
0

Ich benutze C# Visual Basic 2017 und ich versuche, eine Listbox zu erstellen, die 3 verschiedene Listen gleichzeitig anzeigen und möchten wissen, ob dies möglich ist. Die Listbox kann zur Zeit jede einzelne Liste mit Hilfe der Funktion ".datasource =" anzeigen. Jede Liste ist vom Typ Klasse, diese Klassen sind alle verschieden, aber es gibt eine Oberklasse und 2 Unterklassen.Mehrere Listen in einem Listenfeld anzeigen

Dies ist, wie ich ausgefüllt habe Namen und die Listen in meiner Form:

public partial class formHome : Form 
{ 
    // Naming and creating my lists at class level so other classes such as buttons can access the lists 
    List<Event> events = new List<Event>(); 
    List<Hospitality> hosps = new List<Hospitality>(); 
    List<Conference> confs = new List<Conference>(); 



    public formHome() 
    { 
     InitializeComponent(); 

     // Fill Event list 
     events.Add(new Event(1, new DateTime(2017, 12, 21), new DateTime(2017, 12, 22), "National Glass Centre", 20, 7.50, "Dynamo Kick off Meeting, Dec 2017")); 
     events.Add(new Event(2, new DateTime(2017, 12, 15), new DateTime(2017, 12, 16), "Winter Gardens Museum", 30, 2.99, "Nature Preservation Meeting")); 
     events.Add(new Event(3, new DateTime(2018, 1, 5), new DateTime(2018, 1, 6), "Theatre Royal", 120, 5.00, "Traditional Irish Dancing")); 

     // Fill Hospitality list 
     hosps.Add(new Hospitality(4, new DateTime(2017, 12, 21), new DateTime(2017, 12, 22), "Stadium of Light", 100, 25.00, "SAFC Charity Auction", false)); 
     hosps.Add(new Hospitality(5, new DateTime(2017, 11, 19), new DateTime(2017, 11, 20), "Empire Cinema", 200, 7.50, "School Cinema Day", true)); 

     // Fill Conference list 
     confs.Add(new Conference(6, new DateTime(2017, 11, 15), new DateTime(2017, 11, 16), "Marriot Hotel", 400, 5.00, "NHS Christmas Night Out", false, false)); 
     confs.Add(new Conference(7, new DateTime(2017, 12, 31), new DateTime(2018, 1, 1), "Hilton Hotel", 500, 10.00, "Police New Years Eve Meeting", true, true)); 
     confs.Add(new Conference(8, new DateTime(2018, 2, 4), new DateTime(2018, 2, 5), "Stadiun of Light", 1000, 7.50, "Duke of Edinburgh Award", true, true)); 
     confs.Add(new Conference(9, new DateTime(2018, 3, 5), new DateTime(2018, 3, 6), "St.Peters Campus", 500, 0, "Results Day", false, true)); 

    } 

Ereignis ist ein Super sowohl Hospitality and Conference, Hospitality and Conference und die beiden Unterklassen von Ereignisse.

Zur Zeit mit dieser Methode in meinem Listenfeld eine Liste zu einem Zeitpunkt anzuzeigen:

private void btnSeenormal_Click(object sender, EventArgs e) 
    { 
     // Clear list box before entering information 
     liDisplay.DataSource = null; 

     // Adding list items of type Event to list box 
     liDisplay.DataSource = events; 
    } 

Wie kann ich alle drei zur gleichen Zeit angezeigt werden, oder wie kann ich die 3-Listen zu einer Einheit verschmelzen?

Vielen Dank im Voraus.

+0

Anstatt 'hosps.Add' und' confs.Add' zu tun, sollten Sie 'events.Add' machen. –

+0

Ich sehe nicht den Grund, dies zu tun, da ich dann nur eine Liste hätte und ich die Aufgabe hätte, die Informationen dem Benutzer nach Typ anzuzeigen. So gibt es 4 Schaltflächen auf dem Formular, die dem Benutzer die Möglichkeit geben, normale Ereignisse, Hospitality-Ereignisse und Konferenzereignisse sowie alle Ereignisse zusammen anzuzeigen. –

+0

Sie können weiterhin 3 Listen verwalten und Hospitality- und Konferenzobjekte zur Liste der Ereignisse und ihrer jeweiligen Listen hinzufügen. –

Antwort

0

Betrachten Sie Ihre Situation mit Polymophism im Hinterkopf. Da

  1. Hospitality IS-A-Ereignis
  2. Conference IS-A-Ereignis

Sie könnten alle drei Listen zu einer Liste von Events kombinieren, indem

tun
events.AddRange(hosps); 
events.AddRange(confs); 

oder wenn Sie Ich möchte die aktuelle Ereignisliste getrennt halten und sie in einer anderen Variablen kombinieren:

List<Event> allEvents = new List<Event>(); 
allEvents.AddRange(events) 
allEvents.AddRange(hosps); 
allEvents.AddRange(confs); 

Stellen Sie sicher, dass Sie den Ereignissen, hosps und confs-Variablen Elemente hinzugefügt haben, bevor Sie AddRange für allEvents aufrufen.

0

Vereinfachte etwas für Ihr Beispiel mit den folgenden zwei Klassen:

public class Students 
{ 
    public string Name { get; set; } 
    public string Year { get; set; } 
} 
public class Teachers 
{ 
    public string Name { get; set; } 
    public int TeacherId { get; set;} 
} 

Und dann hast du nicht klären, was Sie zeigen wollen, aber für ein einfaches nur einige Werte zeigen Sie auswählen können, Klasse Eigenschaften und fügen sie sie entweder eine neue Liste zuerst, oder direkt an die Steuerung wie folgt:

 List<Students> students = new List<Students>() 
     { 
      new Students() {Name = "Ray", Year = "2017"}, 
      new Students() { Name = "Carla", Year = "2019" } 
     }; 

     List<Teachers> teachers = new List<Teachers>() 
     { 
      new Teachers() {Name = "Mr. Smith", TeacherId = 151}, 
      new Teachers() {Name = "Mrs. Barbara", TeacherId = 901} 
     }; 

     listBox1.Items.AddRange(teachers.Select(x => x.Name).ToArray()); 
     listBox1.Items.AddRange(students.Select(s => s.Name).ToArray()); 

es ist nicht die Art und Weise performant es jedoch zu tun, sondern würde für kleine Datensätze gut funktionieren.

+0

Vielen Dank für die Hilfe, endlich das Programm beendet, alles was ich wissen musste war, wie man mehrere Listen mit dieser Array-Funktion hinzufügen. hinzugefügt die 3 Listen und es funktioniert Sound. Danke nochmal Jungs. –

+0

@OliverAllen Das ist großartig! Schön, dass wir helfen können. Bitte denken Sie daran, die Antworten zu verbessern, die Ihnen geholfen haben UND eine Antwort zu akzeptieren, um zukünftigen Suchern zu helfen –