Событие LocalReport.SubreportProcessing
Происходит при обработке вложенного отчета.
Пространство имен: Microsoft.Reporting.WinForms
Сборка: Microsoft.ReportViewer.WinForms (в microsoft.reportviewer.winforms.dll)
Синтаксис
'Декларация
'Применение
Замечания
Необходимо передать данные для всех источников данных, используемых во вложенных отчетах. Для этого необходимо передать обработчик для события SubreportProcessing.
Можно определить значения параметров, переданных вложенному отчету, изучив свойство Parameters и указав данные, соответствующие значениям этих параметров.
Если основной отчет содержит несколько вложенных отчетов, можно изучить свойство ReportPath класса SubreportProcessingEventArgs, чтобы определить, какой вложенный отчет обрабатывается, и указать данные для этого вложенного отчета.
Дополнительные сведения об аргументах, передаваемых этому обработчику события, см. в разделе SubreportProcessingEventArgs.
Примеры
В следующем примере кода при помощи вложенных отчетов реализуется отчет по основным сведениям с подробностями. В коде загружается образец отчета, содержащий вложенный отчет, и устанавливается обработчик события SubreportProcessing. Аргументы, переданные обработчику события SubreportProcessing, включают объект, инкапсулирующий вложенный отчет. Обработчик события добавляет в этот вложенный отчет экземпляр источника данных перед выводом в элементе управления ReportViewer.
using System;
using System.Data;
using System.Windows.Forms;
using Microsoft.Reporting.WinForms;
public class Demo : Form
{
private DataTable orderDetailsData = null;
private DataTable LoadOrdersData()
{
// Load data from XML file.
DataSet dataSet = new DataSet();
dataSet.ReadXml(@"c:\OrderData.xml");
return dataSet.Tables[0];
}
private DataTable LoadOrderDetailsData()
{
// Load data from XML file.
DataSet dataSet = new DataSet();
dataSet.ReadXml(@"c:\OrderDetailData.xml");
return dataSet.Tables[0];
}
void DemoSubreportProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
{
if (orderDetailsData == null)
orderDetailsData = LoadOrderDetailsData();
e.DataSources.Add(new ReportDataSource("DataSet1_OrderDetails", orderDetailsData));
}
public Demo()
{
this.Text = "Report Control Demo";
this.ClientSize = new System.Drawing.Size(700, 600);
ReportViewer reportViewer = new ReportViewer();
// Set Processing Mode.
reportViewer.ProcessingMode = ProcessingMode.Local;
// Set RDL file.
reportViewer.LocalReport.ReportPath = @"c:\Orders.rdlc";
// Add a handler for SubreportProcessing.
reportViewer.LocalReport.SubreportProcessing +=
new SubreportProcessingEventHandler(DemoSubreportProcessingEventHandler);
// Supply a DataTable corresponding to each report dataset.
reportViewer.LocalReport.DataSources.Add(
new ReportDataSource("DataSet1_Orders", LoadOrdersData()));
// Add the reportviewer to the form.
reportViewer.Dock = DockStyle.Fill;
this.Controls.Add(reportViewer);
// Process and render the report.
reportViewer.RefreshReport();
}
[STAThread]
public static int Main(string[] args)
{
Application.Run(new Demo());
return 0;
}
}
Option Explicit On
Imports System
Imports System.Drawing
Imports Microsoft.Reporting.WinForms
Public Class Form1
Inherits System.Windows.Forms.Form
Private orderDetailsData As DataTable = Nothing
Friend WithEvents ReportViewer1 As Microsoft.Reporting.WinForms.ReportViewer
Function LoadOrdersData() As DataTable
' Load
Dim dataSet As New DataSet()
dataSet.ReadXml("c:\MyReports\OrderData.xml")
Return dataSet.Tables(0)
End Function
Function LoadOrderDetailsData() As DataTable
Dim dataSet As New DataSet()
dataSet.ReadXml("c:\MyReports\OrderDetailData.xml")
Return dataSet.Tables(0)
End Function
Public Sub DemoSubreportProcessingEventHandler(ByVal sender As Object, _
ByVal e As SubreportProcessingEventArgs)
If orderDetailsData Is Nothing Then
orderDetailsData = LoadOrderDetailsData()
End If
e.DataSources.Add(New ReportDataSource("DataSet1_OrderDetails", orderDetailsData))
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ReportViewer1 = New Microsoft.Reporting.WinForms.ReportViewer
Me.ReportViewer1.Dock = System.Windows.Forms.DockStyle.Fill
Me.Text = "Report Control Demo"
Me.ClientSize = New System.Drawing.Size(700, 600)
Me.ReportViewer1.ProcessingMode = ProcessingMode.Local
Me.ReportViewer1.LocalReport.ReportPath = "c:\MyReports\Orders.rdlc"
AddHandler Me.ReportViewer1.LocalReport.SubreportProcessing, AddressOf DemoSubreportProcessingEventHandler
Me.ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1_Orders", LoadOrdersData()))
Me.Controls.Add(ReportViewer1)
Me.ReportViewer1.RefreshReport()
End Sub
End Class
См. также
Справочник
Класс LocalReport
Члены LocalReport
Пространство имен Microsoft.Reporting.WinForms