Entwickler-Ecke
WPF / Silverlight - Liste ObservableCollection
RobAll - Di 02.04.19 18:14
Titel: Liste ObservableCollection
Guten Abend,
ich versuch gerade eine List aus der DB zu füllen.
folgender Testansatz funktioniert:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| ListHersteller = new ObservableCollection<Combolisten>() {
new Combolisten(){ID=1, Hersteller="H1"}
,new Combolisten(){ID=2 , Hersteller="H2"}}; |
die Messagebox zeigt die Daten aus der DB an
C#-Quelltext
1: 2: 3: 4:
| var Hersteller_query = context.Tab_Hersteller.Select(p => new { p.ID, p.Hersteller }
foreach (var item in Hersteller_query) MessageBox.Show(item.ID + item.Hersteller); |
Bei folgenden Versuchen bleibt die Liste leer.
V1
C#-Quelltext
1: 2: 3: 4:
| ListHersteller = new ObservableCollection<Combolisten>(); { foreach (var item in Hersteller_query) new Combolisten() { ID = item.ID, Hersteller = item.Hersteller }; } |
V2
C#-Quelltext
1: 2:
| var ListHersteller = new ObservableCollection<Combolisten>(); ListHersteller.ToList().ForEach(item => context.Tab_Hersteller.Select(p => new { p.ID, p.Hersteller })); |
Wer kann mir helfen?
Danke vorab.
VG
RobAll
Moderiert von Christian S.: C#-Tags hinzugefügt
Ralf Jansen - Di 02.04.19 18:50
In V1 fehlt das Hinzufügen zur Collection via einem Aufruf von Add. Die geschweiften Klammern tun hier gar nix. Das ist so kein Initializer (man beachte das Semikolon hinter dem Construktoraufruf, danach kommt was unabhängiges). In einem Initializer könntest du auch keine Sprachkonstrukte wie z.B. Schleifen ausführen.
In V2 versuchst du über eine leere Liste zu iterieren da passiert dann natürlich auch nichts. Und mit dem ForEach würdest du nur für jedes Element in der Liste etwas tun aber keine Listenelemente erzeugen. Maximal könntest du Elemente verändern.
Du kannst aus context.Tab_Hersteller eine List von deinem Typ erstellen und die dann an den Konstruktor der ObservableCollection übergeben.
Etwa
C#-Quelltext
1:
| var listHersteller = new ObservableCollection<Combolisten>(context.Tab_Hersteller.Select(p => new Combolisten() { p.ID, p.Hersteller }).ToList()); |
RobAll - Di 02.04.19 20:11
Danke für das Beispiel.
Den Fehler bekomme ich leider nicht in den Griff
Zitat: |
Fehler CS1922 Der Typ "Combolisten" kann nicht mit einem Auflistungsinitialisierer initialisiert werden, da er nicht "System.Collections.IEnumerable" implementiert.
|
Problem bei
{ p.ID, p.Hersteller }
Was tun
Moderiert von Th69: Quote- und C#-Tags hinzugefügt.
Moderiert von Th69: Vollzitat entfernt.
Ralf Jansen - Di 02.04.19 20:25
Du musst noch die Felder/Property-Namen des Combolisten Typs hinschreiben.
Ich hatte deinen Code einfach übernommen und aus dem anonymen Typ den konkreten gemacht ohne das auch zu korrigieren.
Also Hersteller
C#-Quelltext
1:
| new Combolisten() { ID = p.ID, Hersteller = p.Hersteller } |
wenn die Felder/Properties in Combolisten so heißen und vom gleichen Typ sind wie in Tab_Hersteller.
RobAll - Di 02.04.19 21:09
C#-Quelltext
1:
| ListHersteller = new ObservableCollection<Combolisten>(context.Tab_Hersteller.Select(p => new Combolisten() { ID = p.ID, Hersteller = p.Hersteller }).ToList()); |
So hats funktioniert
Danke für die Hilfe!
Moderiert von Th69: C#-Tags hinzugefügt.
Moderiert von Th69: Vollzitat entfernt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!