Entwickler-Ecke

C# - Die Sprache - ListBox nur bestimmte Elemente einblenden.


LUCE - Do 18.08.11 11:40
Titel: ListBox nur bestimmte Elemente einblenden.
Hallo,

ich bin C# Neuling und habe folgendes Problem:

Ich habe eine Liste erstellt, die Objekte der Klasse Filme enthällt.
Jeder Film hat die Eigenschaften: Filmtitel, Genre, erscheinungsjahr usw.

Alle Filme werden mir nun in einer ListBox mit ihrem Titel angezeigt.

Mein Ziel ist es nun, dass nur Filme eines bestimmten Genres in der ListBox aufgeführt werden. Wie geht das?


Ralf Jansen - Do 18.08.11 11:56

Du hast doch bestimmt schon eine Anzeige der ungefilterten Liste in der Listbox, oder? Zeig uns doch kurz den Code dann können wir dir dazu ein passendes Filterverfahren zeigen.


LUCE - Do 18.08.11 12:11

Also meine Liste sieht wie folgt aus:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
Filme.Add(new Film());
Filme[0].FilmTitel = "12 Monkeys";
Filme[0].Genre = "Mystery";
Filme[0].Erscheinungsjahr = 1995;
Filme[0].Laufzeit = 129;
Filme[0].IMDBWertung = 8.1;

Filme.Add(new Film());
Filme[1].FilmTitel = "City of God";
Filme[1].Genre = "Action";
Filme[1].Erscheinungsjahr = 2002;
Filme[1].Laufzeit = 130;
Filme[1].IMDBWertung = 8.8;

Filme.Add(new Film());
Filme[2].FilmTitel = "Das Vermächtnis der Tempelritter";
Filme[2].Genre = "Abenteuer";
Filme[2].Erscheinungsjahr = 2004;
Filme[2].Laufzeit = 131;
Filme[2].IMDBWertung = 6.8;

// Usw.


In meiner ListBox werden mir jetzt Die jeweiligen Filmtitel aller Filme angezeigt.
Jetzt will ich halt nur die Filme in meiner ListBox aufgeführt haben, die zum Beispiel vom Genre "Action" sind.

PS. Ich habe noch nicht geschnallt, wie ich meinen Code hier vernünftig posten kann :P . Könntest du mir das bitte ebenfalls kurz erleutern?
Danke im vorraus

Moderiert von user profile iconTh69: C#-Tags hinzugefügt - dafür gibt es unter "Bereiche" den Eintrag "C#"


Ralf Jansen - Do 18.08.11 12:22

z.b. so


C#-Quelltext
1:
2:
3:
4:
string meinGenre = "Action";

meineListBox.DisplayMember = "FilmTitel";
meineListBox.DataSource = Filme.Where(x => x.Genre == meinGenre);

Um Code zu markieren musst du ihn mit <span class="inlineSyntax">{PROTECTTAGf4802c0c72fab62184c466e3d43da20e}</span> umschließen. Oberhalb des Beitragseditors findest du auch unter Bereiche die entsprechende Auswahl. Denn '+'-Button.


LUCE - Do 18.08.11 13:29

Das funktioniert leider noch nicht.

Beim debuggen bekomme ich an der Stelle:
FilmeListBox.DataSource = Filme.Where(x => x.Genre == GenreAction);

eine Fehlermeldung: Das komplexe DataBinding akzeptiert als Datenquelle entweder IList oder IListSource.

Verwende ich einfach nur: FilmeListBox.DataSource = Filme ist alles in Ordnung.


Muss ich x durch irgendetwas in meinem Code ersetzen, oder liegt es an einem anderen Problem?


Ralf Jansen - Do 18.08.11 13:34

Dann noch ein ToList() anhängen.

C#-Quelltext
1:
FilmeListBox.DataSource = Filme.Where(x => x.Genre == GenreAction).ToList();                    


LUCE - Do 18.08.11 13:50

Super jetzt gehts ohne Probleme :gaehn: .
Vielen Dank!!!