ネストされたオブジェクトを Microsoft レポートで動作させようとしています。http://www.gotreportviewer.com/objectdatasources/index.htmlからサンプル コードをダウンロードしたところ、正しく実行されました。
Windows フォームとそのコードに基づいて、次の小さなアプリを作成しました。入れ子になったオブジェクトの値を参照すると、データが表示される場所に "#Error" が表示されるだけです。
このレポートでは、Web サイトで推奨されているのと同じネストされたオブジェクト構文を使用しています。
=Fields!Name.Value.FirstName
私のコンピューターのアプリケーションでは機能しますが、私のコンピューターでは機能しません。理解できない!誰かがこれに遭遇したことがありますか、またはなぜこれが起こるのか知っていますか?
さらに、これが関連しているかどうかはわかりませんが、ClientItem のインスタンスを 1 つだけ LocalReport.DataSources オブジェクトに追加することはできません。リストでなければなりません。ただし、レンダリングすると、レポートのテーブルに (#Errored) データが 1 行だけ表示されます。
どんな助けでも大歓迎です!
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();
}
}
}