2010-03-31 5 views
10

Ich versuche, ein Unterobjekt in einem Feldausdruck in einem Studio 2010-Bericht zu referenzieren. Dies funktioniert in früheren Versionen. Wenn ein Konto auf ein anderes Objekt mit Eigenschaften verweist, funktionierte das Folgende.untergeordnete Objekte in rdlc (Studio 2010RC)

=Fields!Account.Value.Name 

(Name eine Eigenschaft des Child-Objekts ist, ist Konto das übergeordnete Objekt)

Die gleiche Ausdruck Syntax nicht mehr funktioniert. Wie verweisen wir die Eigenschaften eines Unterobjekts in Dienstleistungen in einem rdlc im Studio 2010.

Dank

+1

Ich renne in die gleiche Sache. Ich verstehe nicht, warum sie diese Funktionalität weggenommen haben, sehr nervig! – AKoran

+1

Offenbar wird in VS 2010 SP1 behoben, solange Ihre Klassen öffentlich und serialisierbar sind. –

Antwort

5

kann ich bestätigen, dass dieser Fehler in VS2010 SP1 behoben wurde ... aber Sie haben alle des betreffenden markieren Klassen als serialisierbar.

Sie ein Beispielprojekt auf dieser Website finden, die eine Arbeitsversion zeigt: http://wraithnath.blogspot.com/2011/04/reportviewer-object-datasource-nested.html

Der Autor erwähnt auch, dass Ihre Klassen einen parameterlosen Konstruktor benötigt, aber ich habe es bekommen, ohne ein Default-Konstruktor mithilfe von Klassen arbeiten . Wenn Sie jedoch alles als serialisierbar markiert haben und immer noch die Meldung "#Error" sehen, versuchen Sie es mit parameterlosen Konstruktoren.

1

Dies ist wahrscheinlich keine angemessene Antwort, aber wenn ich das Gefühl habe, dass der Mangel an Material zu diesem Thema mich ermutigt, über meine Ergebnisse zu veröffentlichen.

Sagen wir, wenn ich eine verschachtelte Liste von Kinder-Objekt innerhalb des Elternobjekts habe. Dies ist eine sehr häufige Situation zum Beispiel, wenn Sie ein Auftragsobjekt (Eltern) haben, haben Sie wahrscheinlich eine Liste von Bestellelementen (Kinder), wie zeigen Sie alle Informationen mit dem RDLC? Es gibt zwei Möglichkeiten: 1 Unterbericht verwenden und 2 Gruppierung verwenden. Mir ist klar, dass beide dasselbe erreichen können, was eine Liste von Details zu einem Bericht anzeigt.

public class Order{ 
    public int OrderID {get; set;} 
    public string Descrpition {get; set;} 
    public List<OrderItem> OrderItems {get; set;} 
} 
public class OrderItem{ 
    public int OrderItemID {get; set;} 
    public decimal Price{get; set;} 
} 

Der einfachste Weg ist die Gruppierung. Bei der Gruppierung müssen Sie einen neuen Datentyp erstellen, der die Eigenschaften von Eltern und Kindern enthält. Ich glaube, dass dieser Weg auch mit einer verschachtelten Liste von Objekten funktioniert. Es klingt vielleicht blöd, aber die meiste Zeit müssen Sie ohnehin einen neuen Datentyp erstellt werden, weil die Typen der in dem Bericht angezeigt werden müssen anders als die Business-Objekte sind:

public class OrderReport{ 
    public int OrderID {get; set;} 
    public string Description {get; set;} 
    public int OrderItemID {get; set;} 
    public decimal Price {get; set;} 
} 

Dann auf der rdlc, die Sie gerade haben Zum Erstellen der übergeordneten Zeilengruppe und einer untergeordneten Zeilengruppe sollte Parent nach OrderID gruppiert werden, die untergeordnete Zeilengruppe sollte auf "Details anzeigen" eingestellt werden. Ich denke, Sie können dies mehrmals tun, um eine verschachtelte Liste von Objekten auf mehreren Ebenen zu erreichen.

Verwandte Themen