2010-05-18 20 views
2

Il y a quelque temps, quelqu'un a demandé comment lier à la propriété d'un objet enfant dans un rapport rdlc. Question here.Pourquoi ne pas lier à une propriété d'objet enfant avec rdlc Report work in vs2010?

La solution était d'utiliser une expression comme ceci:

=Fields!ChildObject.Value.SomeProperty 

J'ai récemment essayé de passer à la version 10 des bibliothèques de rapports (Microsoft.ReportViewer.WebForms et Microsoft.ReportViewer.Common) et pour certains raison pour laquelle cela ne fonctionne plus. J'ai rendu le rapport et l'affichage de toutes les données à l'exception de ceux qui utilisent cette technique. Au lieu de la valeur de la propriété, je reçois le texte: "#Error"

Pourquoi cela ne fonctionne plus? Quelqu'un sait-il comment dans la nouvelle version?

+1

duplication possible de [objets enfants dans rdlc (Studio 2010RC)] (http://stackoverflow.com/questions/2551969/child-objects-in-rdlc-studio-2010rc) – KyleMit

+1

Voici l'annonce officielle du support de Microsoft sur [Blog de visionneuse de rapports de Brian Hartman] (http://wraithnath.blogspot.com/2011/04/reportviewer-object-datasource-nested.html) – KyleMit

Répondre

3

Je peux confirmer que ce bug a été corrigé dans VS2010 SP1 ... mais vous devez marquer tous les des classes pertinentes 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 avec des classes sans le 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.

0
+0

Des mois plus tard et MS n'a toujours pas de solution autre que d'aplatir vos objets. – AKoran

+0

On dirait qu'il pourrait y avoir une solution dans VS 2010 SP1, assez déçu. Veuillez voter sur le rapport de bug si vous rencontrez ce problème. Merci! – andrej351

0

Vous n'avez pas besoin d'aplatir vos objets. Au lieu de cela, vous pouvez lier plusieurs ensembles de données à signaler. Vous pouvez ensuite affecter plusieurs sources de données de rapport à votre rapport via le code. Voici l'échantillon de travail:

List<Loan> loans = new List<Loan>(); 
loans.Add(GetLoanByLoanNumber(loanNumber)); 

LocalReport report = new LocalReport(); 
report.ReportPath = HostingEnvironment.MapPath("~/bin/Report/Receipt.rdlc"); 

ReportDataSource loanDetailsDataSource = new ReportDataSource(); 
loanDetailsDataSource.Name = "LoanDataSet"; //This refers to the dataset name in the RDLC file 
loanDetailsDataSource.Value = loans; 
report.DataSources.Add(loanDetailsDataSource); 

ReportDataSource loanItemsDataSource = new ReportDataSource(); 
loanItemsDataSource.Name = "LoanItemsDataSet"; //This refers to the dataset name in the RDLC file 
loanItemsDataSource.Value = loans[0].loanItems; 
report.DataSources.Add(loanItemsDataSource); 

ReportDataSource principalPaymentDataSource = new ReportDataSource(); 
principalPaymentDataSource.Name = "PrincipalPaymentDataSet"; //This refers to the dataset name in the RDLC file 
principalPaymentDataSource.Value = loans[0].principalPayments; 
report.DataSources.Add(principalPaymentDataSource); 

ReportDataSource interestPaymentDataSource = new ReportDataSource(); 
interestPaymentDataSource.Name = "InterestPaymentDataSet"; //This refers to the dataset name in the RDLC file 
interestPaymentDataSource.Value = loans[0].interestPayments; 
report.DataSources.Add(interestPaymentDataSource); 

Espérons que cela aidera quelqu'un!