Microsoft сообщает, что источник данных вложенного объекта дает #Error - PullRequest
2 голосов
/ 23 января 2009

Я пытаюсь заставить вложенные объекты работать в отчетах 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();
        }
    }
}

1 Ответ

1 голос
/ 23 января 2009

Хорошо, решение проблемы с тестовым примером (выше) состоит в том, чтобы сделать свойства в ClientName общедоступными:

public class ClientName
{
    public ClientName(string first, string last)
    {
        FirstName = first;
        LastName = last;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Это решило проблему тестового примера для меня.

Однако у меня все еще были проблемы с моим реальным отчетом. Это все еще давало ошибку. Как оказалось, это произошло потому, что подобъект был определен в другой сборке.

Чтобы это работало, необходимо добавить следующую строку в файл AssemblyInfo.cs проекта, содержащий подобъект:

[assembly: AllowPartiallyTrustedCallers]

Теперь это работает! Потребовалось много времени, чтобы понять это - надеюсь, это кому-нибудь поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...