![]() |
[.NEt 2.0] ListBox zeigt keine gebundenen Daten an?
In
![]() Mit einem extrem ähnlichen Code versuche ich nun, eine Liste in eine ListBox zu bekommen, aber die Listbox zeigt nix an:
Code:
Nun ist die ListBox aber weiterhin leer :-(
// Get available roles for Selection list:
_rightsRoleList = new RoleList(); _rightsRoleList.Init(); // put roles to source _srcRightsRoleList = new DataBindingSource(); _srcRightsRoleList.DataSource = _rightsRoleList; // put source to ListBox lstBoxRightsRoles.DisplayMember = "Name"; lstBoxRightsRoles.DataMember = "Name"; lstBoxRightsRoles.DataSource = _rightsRoleList; Die Liste hat Items, beim Debuggen werden auch beide Einträge angezeigt, aber auf dem UI ist nix zu sehen. Anscheinend sind die WinForms Controls nicht so ganz trivial, im Web-Bereich hab ich da nie wirklich Probleme mit gehabt... Was hab ich denn hier vergessen? Bei der Grid reicht das hier vollkommen aus. :gruebel: |
Re: [.NEt 2.0] ListBox zeigt keine gebundenen Daten an?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ist RoleList auch wirklich von List<T> oder BindingList<T> abgeleitet, bzw implementiert es generische Interfaces? Wenn nicht würde ich sofort dort ansetzen, weil sie einfach zu furchtbarem (1.1-like) IL-Code führen was Iterationen angeht und man kann sowas mit keinen generischen Methoden benutzen. Ich glaub(t)e dass hier dein Problem liegen könnte, da dein "strongly" typed container nicht die PropertyListe seiner Items an den BindingContext liefern könnte. Das Erben von einer generischen Liste (welche BCL-Liste auch immer) sollte das Problem beseitigen. Nachtrag1: Lol! jetzt sehe ich erst, dass du den DataMember besetzt, obwohl "Name" ganz sicher kein Container ist, right? Ich habe wie oben zu lesen ist schon nach esotherischen Problemen gesucht. Einfach DataSource besetzen und DisplayMember. DataMember macht hier keinen Sinn. Wenn du ToString() überschrieben hast, brauchst du nichtmal DisplayMember. FTR: DataMember benutzt man, wenn die Klasse der DataSource selbst wieder Eigenschaften besitzt, die ein Container ist. Auf die Art kannst du einfach Master-Detail-Beziehungen abbilden, aber hier ist das natürlich absoluter Käse. (Oder erkennt SWF hier das IEnumerable von String und gibt dir die einzelnen Chars? :mrgreen: Nachtrag2: Gerade getestet -> Ja! :lol: (gleich'n screenie angehängt :mrgreen: ) Zitat:
edit2: :shock: Boah, habe ich hier einen Kauderwelsch reineditiert... :freak: |
Re: [.NEt 2.0] ListBox zeigt keine gebundenen Daten an?
Zitat:
Es ist interessanterweise die gleiche Liste, die im anderen Form einwandfrei an der Grid hängt und da alles tut was sie soll. Zitat:
Zitat:
ABER: Wenn ich nur:
Code:
Mache hilft das auch nicht.
// Get available roles for Selection list:
_rightsRoleList = new RoleList(); _rightsRoleList.Init(); // put roles to source _srcRightsRoleList.DataSource = _rightsRoleList; Int32 Testcount = _srcRightsRoleList.List.Count; // put source to ListBox lstBoxRightsRoles.DisplayMember = "Name"; lstBoxRightsRoles.DataSource = _rightsRoleList; Zitat:
|
Re: [.NEt 2.0] ListBox zeigt keine gebundenen Daten an?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: [.NEt 2.0] ListBox zeigt keine gebundenen Daten an?
In dem Screenie habe ich ein class diagram gezeigt mit der Bleistiftklasse. Bei mir gates. ;)
Jetzt gibt es mehrere Möglichkeiten und ich tippe immer noch auf meinen ersten Verdacht: der BindingContext bekommt keine komplette PropertyCollection. Irgendwo down the road wird eine der Vorgängercontainerklassen ITypedList implementieren und den TypeDescriptor von Object oder eines Vorgängers von Role benutzen. Dadurch würden dir natürlich die Properties fehlen, bzw sie würden nicht mehr richtig ankommen. Es scheint dass du den Code von Role oder RoleList + Vorfahren nicht so einfach rausrücken willst. ;) Ich kann dir ein NDA anbieten und du mailst mir den nötigen Code, da das mit einer Fernwartung ohne Code nix wird. Die zweite und definitiv schniekeste Lösung wäre, wenn du auf CollectionBase verzichtest und deine Container on Grund auf generisch machst. Du hättest also ProjectBaseList<T> : List<T> und RoleList : ProjectBaseList<Role>. Da ProjectBaseList nicht umsonst existiert und du darin ganz sicher auf Eigenschaften des Vorgängers deiner ElementKlasse zugreifst, müsstest du sie deshalb so deklarieren:
Code:
Ich nahm hier ein Interface.
public class ProjectBaseList<T> : List<T>
where T: IVorgänger, class { ... }
|
Re: [.NEt 2.0] ListBox zeigt keine gebundenen Daten an?
Du hast Recht, den Code kann ich hier ned posten, aber Du bekommst morgen früh mal Post :)
Die Baselist genereisch machen.. wär ne nette Idee, aber das Objekt ist ziemlich spezifisch weil es die Datenbankzugriffe für die Items erledigt. Will heissen die spezifische Collection kennt die Programmlogik für die Erstellung der spezifischen Objekte und der Liste selber, und damit ist da nix generisches rauszuziehen, zumal die einzelnen Objekte u.U. recht komplex sind. Naja, diese Rolle hier nicht, aber manch andere schon. Zudem kann ich von dem Aufbau nicht weg. Der ist im Projekt vorgegeben und ich kann nicht davon abweichen. Was mich immer noch wundert: Genau diese Objekte funktionieren einwandfrei an einer Grid. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz