Я пытаюсь заставить вложенные объекты работать в отчетах Microsoft. Я скачал пример кода с http://www.gotreportviewer.com/objectdatasources/index.html,, и он работает правильно.
Я создал следующее небольшое приложение на основе формы Windows и их кода, и все, что я когда-либо получаю, ссылаясь на значение вложенного объекта, - это "#Error" в месте, где должны появиться данные.
В отчете я использую тот же синтаксис вложенных объектов, который рекомендуется на веб-сайте:
=Fields!Name.Value.FirstName
Это работает для их применения на моем компьютере, но не для моего. Я не могу этого понять! Кто-нибудь сталкивался с этим или знает, почему это происходит?
Более того - и я не знаю, связано ли это с этим, - я не могу добавить ни одного экземпляра ClientItem в объект LocalReport.DataSources. Это должен быть список. Однако при рендеринге в таблице отчета отображается только одна строка (#Errored) данных.
Любая помощь будет оценена!
namespace ReportTest
{
public class ClientItem
{
public int Id { get; set; }
public ClientName Name { get; set; }
}
public class ClientName
{
public ClientName(string first, string last)
{
FirstName = first;
LastName = last;
}
string FirstName { get; set; }
string LastName { get; set; }
}
public partial class Form1 : Form
{
private List<ClientItem> clients = new List<ClientItem>();
public Form1()
{
InitializeComponent();
PopulateLists();
GenerateReport();
}
private void PopulateLists()
{
clients.Add(new ClientItem { Id = 1, Name = new ClientName("Adrian", "Adesco") } );
clients.Add(new ClientItem { Id = 2, Name = new ClientName("Brian", "Briar") } );
clients.Add(new ClientItem { Id = 3, Name = new ClientName("Clive", "Cussler") } );
}
private void GenerateReport()
{
this.Text = "Report Control Demo";
this.ClientSize = new System.Drawing.Size(950, 600);
ReportViewer reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "TestReport.rdlc";
reportViewer.LocalReport.DataSources.Add(new ReportDataSource("ReportTest_ClientItem", clients));
reportViewer.Dock = DockStyle.Fill;
this.Controls.Add(reportViewer);
reportViewer.RefreshReport();
}
}
}