VS 2010报表查看器无法访问嵌套集合,任何人?

nit*_*rog 5 .net c# reportviewer list reporting-services

我像往常一样经历了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; }
}
Run Code Online (Sandbox Code Playgroud)

然后我填充了这些集合.

    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);
Run Code Online (Sandbox Code Playgroud)

然后我将所有内容分配给报告.

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

在报告中,它显示人们将显示没有问题,因为我将文本框添加到列表,然后按ID分组列表.当我尝试显示电话号码时,我收到#ERROR消息,在我的生活中,我似乎找不到显示分配给某个人的号码列表的方法.

如果我从List<PhoneNumber>person类中更改对象,PhoneNumber我可以访问它,但在尝试显示List<PhoneNumber>我不能时.

我需要List<of objects>在类别项目中显示.

Cos*_*lis 2

嵌套集合必须显示为子报表,其中嵌套集合是单独的数据源。您必须将事件LocalReport.SubreportProcessing绑定到处理程序,该处理程序将筛选数据源 (PhoneNumbers) 并将其绑定到子报表作为单独的报表数据源。提供的链接中的示例应该可以帮助您到达您需要去的地方。