LocalReport.SubreportProcessing 事件
發生在處理子報表時。
命名空間: Microsoft.Reporting.WebForms
組件: Microsoft.ReportViewer.WebForms (在 Microsoft.ReportViewer.WebForms.dll 中)
語法
'宣告
Public Event SubreportProcessing As SubreportProcessingEventHandler
'用途
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 支援使用事件,但不支援新的宣告。
備註
SubreportProcessing 事件會針對主報表中的每個子報表執行個體而觸發,而不只是針對每個子報表定義觸發。如果報表包含來自同一個報表定義的多個子報表執行個體,這個事件會針對每個執行個體觸發。
您必須提供子報表所用之任何資料來源的資料。若要這麼做,您必須提供 SubreportProcessing 事件的事件處理常式。
您可以檢查 Parameters 屬性,提供對應於這些參數值的資料,來檢查傳給子報表的參數值。
如果主報表有多份子報表,您可以檢查 SubreportProcessingEventArgs 類別的 ReportPath 屬性來判斷正在處理的子報表,以及提供這份子報表的資料。
請參閱 SubreportProcessingEventArgs,以取得傳給這個事件處理常式之引數的描述。
範例
下列程式碼範例會實作使用子報表的主從式報表。此程式碼會載入一個包含子報表的範例報表,並設定事件處理常式來處理 SubreportProcessing 事件。傳遞至 SubreportProcessing 事件處理常式之引數包括封裝子報表的物件。事件處理常式會將資料來源執行個體加入至這個子報表,然後才會在 ReportViewer 控制項中將它轉譯。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Reporting.WebForms;
public partial class _Default : System.Web.UI.Page
{
private DataTable orderDetailsData = null;
private DataTable LoadOrdersData()
{
// Load data from XML file
DataSet dataSet = new DataSet();
dataSet.ReadXml(@"c:\My Reports\OrderData.xml");
return dataSet.Tables[0];
}
private DataTable LoadOrderDetailsData()
{
// Load data from XML file
DataSet dataSet = new DataSet();
dataSet.ReadXml(@"c:\My Reports\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));
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Set RDL file
ReportViewer1.LocalReport.ReportPath =
@"c:\My Reports\Orders.rdlc";
// Supply a DataTable corresponding to each report dataset
ReportViewer1.LocalReport.DataSources.Add(
new ReportDataSource("DataSet1_Orders",
LoadOrdersData()));
}
// Add a handler for SubreportProcessing
ReportViewer1.LocalReport.SubreportProcessing += new
SubreportProcessingEventHandler(DemoSubreportProcessingEventHandler);
}
}
using System;
Imports System.Data
Imports Microsoft.Reporting.WebForms
Partial Class _Default
Inherits System.Web.UI.Page
Dim orderDetailsData As DataTable = Nothing
Private Function LoadOrdersData() As DataTable
Dim dataSet As New DataSet()
dataSet.ReadXml("c:\My Reports\OrderData.xml")
LoadOrdersData = dataSet.Tables(0)
End Function
Private Function LoadOrderDetailsData()
Dim dataSet As New DataSet()
dataSet.ReadXml("c:\My Reports\OrderDetailData.xml")
LoadOrderDetailsData = 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 Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If (Not IsPostBack) Then
' Set RDL file.
ReportViewer1.LocalReport.ReportPath = "c:\My Reports\Orders.rdlc"
' Supply a DataTable corresponding to each report data source.
Dim myReportDataSource = New ReportDataSource("DataSet1_Orders", LoadOrdersData())
ReportViewer1.LocalReport.DataSources.Add(myReportDataSource)
End If
'Add a handler for drillthrough.
AddHandler ReportViewer1.LocalReport.SubreportProcessing, AddressOf DemoSubreportProcessingEventHandler
End Sub
End Class