VS 2010 Report Viewer не может получить доступ к вложенным коллекциям, кто-нибудь? - PullRequest
5 голосов
/ 01 июля 2011

Я прошел через все обходы MSDN, как обычно, они бесполезны - крайне ограничены.

Если я сделаю внутренний объект в своем классе отдельным классом, я смогу отобразить информацию, но как только я преобразую ее в список объектов (коллекцию), я получу на экране ошибку #Error.

Вот обновленный пример.

Например, у меня есть объект Person, который может иметь один или несколько телефонных номеров (список номеров), и я не могу найти способ доступа к телефонным номерам.

[Serializable]
public class Person
{
    private readonly List<PhoneNumber> _numbers = new List<PhoneNumber>();

    public Person()
    {
    }

    public Person(int id, string name, string address, decimal salary)
    {
        Id = id;
        Name = name;
        Address = address;
        Salary = salary;
    }

    public void AddNumber(PhoneNumber number)
    {
        _numbers.Add(number);            
    }


    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }

    public List<PhoneNumber> PhoneNumbers { get { return _numbers; } }       

}

[Serializable]
public class PhoneNumber
{
    public PhoneNumber()
    {
    }

    public PhoneNumber(int id, string areaCode, string phone)
    {
        AreaCode = areaCode;
        Id = id;
        Phone = phone;
    }

    public string AreaCode { get; set; }
    public string Phone { get; set; }
    public int Id { get; set; }
}

Затем я заполняю коллекции.

    var persons = new List<Person>();

    var t = new Person(1, "Mike", "5150 Nuts", 125);

    t.AddNumber(new PhoneNumber(1, "425", "455"));
    t.AddNumber(new PhoneNumber(1, "425", "450"));

    persons.Add(t);

    t = new Person(2, "Tom", "1055 MS HAS NO DOCUMENTATION AS USUAL!", 1245);

    t.AddNumber(new PhoneNumber(2, "TYPICAL", "OF-THEM"));
    t.AddNumber(new PhoneNumber(2, "ANY", "ONE???"));

    persons.Add(t);

Затем я назначаю все отчету.

    reportViewer1.ProcessingMode = ProcessingMode.Local;
    reportViewer1.LocalReport.ReportPath = "..\\..\\Report1.rdlc";
    reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Person",persons));
    reportViewer1.RefreshReport();

В отчете отображаются люди, которые будут отображаться без проблем, когда я добавляю текстовые поля в список, а затем группирую список по идентификатору. Когда я пытаюсь отобразить номера телефонов, я получаю сообщение #ERROR, и, судя по всему, не могу найти способ отобразить список номеров, которые назначены человеку.

Если я изменю объект с List<PhoneNumber> в классе персонажа на PhoneNumber, я смогу получить к нему доступ, но при попытке отобразить List<PhoneNumber> я не смогу.

Мне нужно быть элем, чтобы отобразить List<of objects> в пределах предмета класса.

1 Ответ

2 голосов
/ 06 июля 2011

Вложенная коллекция должна отображаться как вложенный отчет, где вложенная коллекция является отдельным источником данных.Необходимо связать событие LocalReport.SubreportProcessing с обработчиком, который отфильтрует и свяжет источник данных (PhoneNumbers) с вложенным отчетом в качестве отдельного источника данных отчета.Пример по приведенной ссылке должен привести вас туда, куда вам нужно.

...