2012-02-13 12 views
5

मैं पीओसीओ/कस्टम बिजनेस ऑब्जेक्ट्स का उपयोग करके अभिभावक-बाल-पोते संबंधों के साथ एक रिपोर्ट कैसे बना सकता हूं?रिपोर्टिंग सेवाएं: पेरेंट-चाइल्ड-ग्रैंडचिल्ड के साथ बिजनेस ऑब्जेक्ट डेटा स्रोत

public class Invoice 
{ 
    public List<Account> Accounts { get; set; } 
} 

public class Account 
{ 
    public List<LineItem> LineItems { get; set; } 
} 

public void GenerateReport() 
{ 
    var localReport = new LocalReport(); 
    localReport.LoadReportDefinition(GetEmbeddedResource("Invoice.rdlc")); 
    localReport.DataSources.Add(new ReportDataSource("InvoiceDataset", new List<Invoice> { invoices })); 
} 

सबरेपोर्ट्स पर तालिका और सूची नियंत्रण का पसंदीदा रूप से उपयोग करना। स्थानीय प्रसंस्करण (.rdlc फ़ाइलों) के साथ रिपोर्टिंग सेवाएं v10।

उत्तर

8

Invoice.rdlc

  • InvoiceDataset (रिपोर्ट डेटा उपकरण खिड़की से) नाम की एक डाटासेट
  • (एक सूची नियंत्रण जोड़ें के बाद से रिपोर्ट भले ही चालान की एक सूची के लिए बाध्य किया जाना चाहिए जोड़ें सूची ही कभी एक तत्व)
  • शामिल होंगे सूची नियंत्रण के भीतर ग्राहक का नाम
  • तरह चालान स्तरीय फ़ील्ड जोड़ने सूची नियंत्रण के भीतर एक Subreport नियंत्रण "खाता" के नाम के साथ Account.rdlc की ओर इशारा करते जोड़ सकते हैं और InvoiceId की एक पैरामीटर

Account.rdlc

  • AccountDataset (रिपोर्ट डेटा उपकरण खिड़की से) नाम की एक डाटासेट जोड़े
  • एक InvoiceId पैरामीटर पैरामीटर Invoice.rdlc में निर्दिष्ट मैच के लिए जोड़ें सबरेपोर्ट नियंत्रण
  • एक सूची नियंत्रण जोड़ें
  • सूची नियंत्रण में खाता संख्या
  • जैसे खाता-स्तर फ़ील्ड जोड़ें
  • सूची नियंत्रण के भीतर ही दो मापदंडों के साथ एक subreport LineItem.rdlc की ओर इशारा करते जोड़ें: InvoiceId और

    • ACCOUNTID

    LineItem.rdlc LineItemDataset (रिपोर्ट डेटा उपकरण खिड़की से नामित एक डाटासेट जोड़े)

  • खाता.rdlc सबरेपोर्ट नियंत्रण
  • में सूचीबद्ध पैरामीटर से मेल खाने के लिए चालान आईडी और खाता आईडी पैरामीटर जोड़ें एक सूची नियंत्रण जोड़ें
  • सूची नियंत्रण के भीतर, जैसे विवरण, मात्रा लाइन आइटम स्तरीय फ़ील्ड जोड़ने के मूल्य

इस रिपोर्ट को एक पीडीएफ के रूप में बनाने के लिए:

public byte[] GenerateInvoicePdf(Invoice invoice) 
{ 
    var localReport = new LocalReport(); 

    localReport.LoadReportDefinition(GetEmbeddedResource("Invoice.rdlc")); 
    localReport.LoadSubreportDefinition("Account", GetEmbeddedResource("Account.rdlc")); 
    localReport.LoadSubreportDefinition("LineItem", GetEmbeddedResource("LineItem.rdlc")); 
    var datasource = new List<Invoice> {invoice}; 
    localReport.DataSources.Add(new ReportDataSource("InvoiceDataset", datasource)); 
    localReport.SubreportProcessing += 
     (o, args) => 
      { 
       if (args.ReportPath == "Account") 
       { 
        var invoiceId = long.Parse(args.Parameters["InvoiceId"].Values[0]); 
        var invoice = datasource.First(x => x.InvoiceId == invoiceId); 
        args.DataSources.Add(new ReportDataSource("AccountDataset", invoice.Accounts)); 
       } 
       else if (args.ReportPath == "LineItem") 
       { 
        var invoiceId = long.Parse(args.Parameters["InvoiceId"].Values[0]); 
        var accountId = long.Parse(args.Parameters["AccountId"].Values[0]); 
        var invoice = datasource.First(x => x.InvoiceId == invoiceId); 
        var account = invoice.Accounts.First(x => x.AccountId == accountId); 
        args.DataSources.Add(new ReportDataSource("LineItemDataset", account.LineItems)); 
       } 
      }; 
    return localReport.Render("pdf"); 
}