Binden eines Objekts mit Unterobjekten als Eigenschaften an ein Datagrid

8

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?

%Vor%     
Scott Vercuski 02.01.2009, 15:44
quelle

4 Antworten

9

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%     
Lasse Vågsæther Karlsen 02.01.2009, 15:49
quelle
9

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.

    
Marc Gravell 03.01.2009 12:10
quelle
3

Ich bin mir nicht sicher, ob Sie ASP.NET verwenden, aber wenn ja, können Sie eine Schablonenspalte und die Eval () -Methode verwenden, um Werte verschachtelter Objekte anzuzeigen. Z.B. um die Description-Eigenschaft des Unterobjekts anzuzeigen:

%Vor%     
M4N 02.01.2009 17:27
quelle
1

Nicht sicher, ob es so etwas ist, nach dem Sie suchen ...

Sie könnten eine Methode schreiben wie:

%Vor%

Dann binden Sie das Objekt so:

%Vor%     
GarethPN 24.08.2011 14:18
quelle