Freigeben über


LocalReport.SubreportProcessing-Ereignis

Tritt auf, wenn ein Unterbericht verarbeitet wird.

Namespace:  Microsoft.Reporting.WinForms
Assembly:  Microsoft.ReportViewer.WinForms (in Microsoft.ReportViewer.WinForms.dll)

Syntax

'Declaration
Public Event SubreportProcessing As SubreportProcessingEventHandler
'Usage
Dim instance As LocalReport
Dim handler As SubreportProcessingEventHandler

AddHandler instance.SubreportProcessing, handler
public event SubreportProcessingEventHandler SubreportProcessing
public:
 event SubreportProcessingEventHandler^ SubreportProcessing {
    void add (SubreportProcessingEventHandler^ value);
    void remove (SubreportProcessingEventHandler^ value);
}
member SubreportProcessing : IEvent<SubreportProcessingEventHandler,
    SubreportProcessingEventArgs>
JScript unterstützt die Verwendung von Ereignissen, jedoch nicht die Deklaration neuer Ereignisse.

Hinweise

Das SubreportProcessing-Ereignis wird für jede Instanz des Unterberichts im Hauptbericht ausgelöst, und nicht nur für jede Unterberichtsdefinition. Falls ein Bericht mehrere Unterberichtinstanzen derselben Berichtsdefinition enthält, wird dieses Ereignis für jede Instanz ausgelöst.

Sie müssen Daten für alle Datenquellen bereitstellen, die in Unterberichten verwendet werden. Hierzu müssen Sie einen Ereignishandler für das SubreportProcessing-Ereignis bereitstellen.

An den Unterbericht übergebene Werte können Sie überprüfen, indem Sie die Parameters-Eigenschaft überprüfen und Daten bereitstellen, die diesen Parameterwerten entsprechen.

Wenn der Hauptbericht mehrere Unterberichte enthält, können Sie die ReportPath-Eigenschaft der SubreportProcessingEventArgs-Klasse überprüfen, um zu ermitteln, welcher Unterbericht verarbeitet wird, und für diesen Unterbericht dann Daten bereitstellen.

Weitere Informationen zu den Argumenten, die an diesen Ereignishandler übergeben werden, finden Sie unter SubreportProcessingEventArgs.

Beispiele

Im folgenden Codebeispiel wird ein Masterdetailbericht mithilfe von Unterberichten implementiert. Der Code lädt einen Beispielbericht, der einen Unterbericht enthält, und richtet einen Ereignishandler für die Behandlung des SubreportProcessing-Ereignisses ein. Zu den an den SubreportProcessing-Ereignishandler übergebenen Argumenten gehört ein Objekt, das den Unterbericht kapselt. Der Ereignishandler fügt diesem Unterbericht eine Datenquelleninstanz hinzu, bevor der Bericht im ReportViewer-Steuerelement gerendert wird.

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

Siehe auch

Verweis

LocalReport Klasse

Microsoft.Reporting.WinForms-Namespace