Ich arbeite mit einem Objekt, in dem sich Unterobjekte befinden (siehe Beispiel unten). Ich versuche, ein List<rootClass>
an das Datagrid zu binden. Wenn ich die List<>
bind, in der Zelle, die die subObject
enthält, sehe ich den folgenden Wert ... "namespace.subObject" ...
die Zeichenfolge Werte korrekt angezeigt werden.
Idealerweise würde ich gerne die "Description" Eigenschaft von subObject
in der Datenzelle sehen. Wie kann ich das subObject.Description
in der Datenzelle anzeigen?
Wenn ich mich nicht irre, zeigt es das Ergebnis des Aufrufs von .ToString () an Ihrem Unterobjekt an, so dass Sie das überschreiben können, um den Inhalt von Beschreibung zurückzugeben.
Haben Sie versucht, nur an Value1.Description zu binden? (Ich schätze, es funktioniert nicht).
Ich habe eine Klasse, die anstelle von List beim Binden verwendet werden kann. Sie implementiert ITtypedList, wodurch eine Sammlung mehr "Eigenschaften" für ihre Objekte bereitstellen kann, einschließlich berechneter Eigenschaften.
Wenn keine einfache Lösung gefunden wird, poste ich später einen Link zu meinem Repository, wenn ich an meinem Heimcomputer bin.
Bearbeiten : Ok, die aktuelle Version der Dateien, die ich habe, ist hier:
Abhängig von Ihrem Browser erhalten Sie entweder eine Warnung oder eine Fehlermeldung, die etwas über das Zertifikat aussagt. Der Grund ist, dass das Zertifikat nicht mit der URL übereinstimmt und ich bin zu faul, um herauszufinden, ob ich etwas dagegen tun kann. Es ist ein Subversion-Repository, also sollte nichts böswilliges da sein, aber die üblichen Richtlinien sind in Kraft.
Sie benötigen einen Benutzernamen und ein Passwort, beide sind guest in Kleinbuchstaben.
Die gewünschten Dateien befinden sich am Ende der Liste, TypedList *.
Leider (für Sie) tendiere ich dazu, Klassen und Code in diese Klassenbibliothek zu schreiben, indem ich andere bereits geschriebene Bits wiederverwende. Sie müssen also die ersten paar Dateien herunterladen und falls diese nicht kompilieren, versuchen Sie es etwas herausnehmen oder ein paar weitere Dateien holen. Es gibt Namespaces und solche weiter oben in der Hierarchie, wenn Sie sie brauchen.
Zu verwenden:
%Vor% Grundsätzlich binden Sie eine Instanz von TypedList<T>
anstelle von List<T>
und passen die BindableProperties-Eigenschaft an. Ich habe einige Änderungen in der Arbeit, einschließlich einer, die nur BindableProperties automatisch aufbaut, wie es geht, aber es ist noch nicht in der Trunk.
Sie können auch berechnete Eigenschaften wie folgt hinzufügen:
%Vor%oder mit .NET 3.5:
%Vor% Da Sie DataGridViewColumn
(Tags) erwähnen, nehme ich an, dass Sie Winforms meinen.
Der Zugriff auf Untereigenschaften ist ein Schmerz; Der Währungsmanager ist an die Liste gebunden, sodass Sie standardmäßig nur auf unmittelbare Eigenschaften zugreifen können. Sie können jedoch über hinausgehen, wenn Sie unbedingt mit einem benutzerdefinierten Typdeskriptor benötigen. Sie müssten auch ein anderes Token verwenden, wie "Foo_Bar" anstelle von "Foo.Bar". Dies ist jedoch eine große Menge an Arbeit, die Kenntnisse von PropertyDescriptor
, ICustomTypeDescriptor
und wahrscheinlich TypeDescriptionProvider
erfordert, und fast sicher ist es nicht wert,
Die einfachste Lösung besteht darin, die Eigenschaft als Shim / Pass-Thru bereitzustellen:
%Vor%Dann binden Sie an "Value2Description" etc.
Tags und Links c# binding object datagrid datagridviewcolumn