2010-03-31 13 views
10

Je tente de référencer un sous-objet dans une expression de champ dans un rapport de studio 2010. Cela fonctionnait dans les versions antérieures. Lorsque le compte fait référence à un autre objet avec des propriétés, les éléments suivants fonctionnaient.objets enfants dans rdlc (Studio 2010RC)

=Fields!Account.Value.Name 

(Nom est une propriété de l'objet enfant, compte est l'objet parent)

La syntaxe même expression ne fonctionne plus. Comment puis-je référencer les propriétés d'un sous-objet dans les services de rapports dans un rdlc en studio 2010.

Merci

+1

Je cours dans la même chose. Je ne comprends pas pourquoi ils ont enlevé cette fonctionnalité, très ennuyeux! – AKoran

+1

Apparemment, il sera corrigé dans VS 2010 SP1, tant que vos classes sont publiques et sérialisables. –

Répondre

5

Je peux confirmer que ce bug a été corrigé dans VS2010 SP1 ... mais vous devez marquer tous du correspondant classes comme Serializable.

Vous trouverez un exemple de projet sur ce site qui montre une version de travail: http://wraithnath.blogspot.com/2011/04/reportviewer-object-datasource-nested.html

L'auteur mentionne également que vos classes auront besoin d'un constructeur parameterless mais j'ai eu à travailler en utilisant des classes sans constructeur par défaut . Cependant, si vous avez marqué tout comme sérialisable et que vous voyez toujours le message "#Error", essayez-le avec des constructeurs sans paramètres.

1

Ceci n'est probablement pas une réponse appropriée, mais quand je me sens comme le manque de matériel sur ce sujet, encouragez-moi à poster sur mes conclusions.

Disons que j'ai une liste imbriquée d'objets enfants dans l'objet parent. C'est une situation très courante par exemple, si vous avez un objet de commande (parent), vous aurez probablement une liste d'éléments de commande (enfants), comment afficher toutes les informations avec le rdlc? Il y a deux manières, 1 utilisant le sous-rapport, et 2 utilisant le groupement. Je me rends compte qu'ils peuvent tous deux réaliser la même chose qui affiche une liste de détails sur un rapport.

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;} 
} 

La méthode la plus simple consiste à utiliser le regroupement. Avec le regroupement, vous devez créer un nouveau type de données qui contient les propriétés du parent et des enfants. Je crois que cette façon fonctionne aussi avec une liste imbriquée à plusieurs niveaux. Cela peut paraître stupide, mais la plupart du temps, vous devez créer un nouveau type de données de toute façon parce que les types dont vous avez besoin pour afficher sur le rapport sont différents des objets métier:

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

ensuite sur le rdlc, il vous suffit Pour créer un groupe de lignes parent et un groupe de lignes enfant, Parent doit être groupé par OrderID, le groupe de lignes enfant doit être défini sur "Afficher les détails". Je pense que vous pouvez le faire plusieurs fois pour obtenir une liste imbriquée à plusieurs niveaux.