2011-07-01 11 views
5

私はいつものようにMSDN上を歩き回りました。彼らは価値がありません。VS 2010レポートビューアーでネストされたコレクションにアクセスできない、誰ですか?

私のクラスの内部オブジェクトを1つのクラスにすると情報を表示できますが、オブジェクトのリスト(コレクション)に変換するとすぐに#Errorが表示されます。

ここには更新された例があります。

例として、1つ以上の電話番号(数字のリスト)を持つことができる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(); 

テキストボックスをリストに追加してIdでリストをグループ化すると、人々は問題なく表示されます。電話番号を表示しようとすると#ERRORというメッセージが表示され、私の人生では人に割り当てられた番号のリストを表示する方法が見つからないようです。

人物クラス内のオブジェクトをList<PhoneNumber>からPhoneNumberに変更すると、それにアクセスできますが、List<PhoneNumber>を表示しようとすると気になりません。

List<of objects>をクラスアイテム内に表示するには、私はエールである必要があります。

+0

レポートはどのようにフォーマットされていますか?名前を使ってレポートをグループ化するだけで、詳細を構成する数字が必要になるようです。 –

+0

私が持っている問題は、電話番号にまったく気がつかないということです。オブジェクトを作成するときに表示されるのは、実際のレポートデザイナーの名前と住所です。私はVS2010を使用しており、私の人生は電話番号にアクセスできません。私は本当にネストされたリストにアクセスする能力が必要です。何か案が? – nitefrog

+0

あなたはこれがうまくいくと思いましたか?あなたは例を見たことがありますか?ほとんどのレポートサービスのデータソースは、実質的にフラットであることに注意してください。 –

答えて

2

ネストされたコレクションは、ネストされたコレクションが別のデータソースであるサブレポートとして表示する必要があります。 LocalReport.SubreportProcessingイベントを、データソース(PhoneNumbers)をフィルター処理して別個のレポートデータソースとしてサブレポートにバインドするハンドラーにバインドする必要があります。提供されたリンクの例は、あなたが必要とするところにあなたを得るでしょう。

+0

ありがとう!完璧に働いた!!!!! – nitefrog

関連する問題