钻取报表的作用?
添加钻取功能使报表更加的灵活易用。它可以使用户查看感兴趣数据的更详细信息,对用户理解数据有很大的帮助。
本文即将阐述如何在 FlashViewer 中使用 客户端API 实现钻取功能。
我们需要做如下工作:
在我们实现该功能之前,我们需要了解相关的接口信息:
RpxHandler: RpxHandler 用于加载 RPX 文件到 ActiveReports 报表中,加载和导出报表到特定的格式,默认值为HTML。我们将使用它加载子报表到报表浏览器中。从主报表中传递参数,并且展示相关子报表到 FlashViewer 中。
OnLinkClick(LinkEventArgs):当点击报表链接时触发此客户端事件。
Parameters: 我们需要将链接信息作为参数传递到子报表中。正如前文所提,参数将由 RpxHandler 进行传递。
让我们先预览本文中例子中实现的效果图:
实现方法
设置 FlashViewer 控件的“UseClientApi” 属性为true,确保点击链接时可以出发客户端事件。在本示例中我们使用 Code Based 报表作为父报表,XML Based 报表作为子报表。
首先,我们需要设置 TextBox 的 Hyperlink” 属性为其文本值。
private void detail_Format(object sender, EventArgs e){if (txtCountry1.Text != "")
{txtCountry1.HyperLink = txtCountry1.Text;}}
在客户端的 OnLinkClick 事件中获取点击链接的值,传递给后台:
var viewer;function init() {
GrapeCity.ActiveReports.Viewer.OnLoad("WebViewer1", function () {viewer = GrapeCity.ActiveReports.Viewer.Attach("WebViewer1");
viewer.setEventsHandler({OnLinkClick: function (e) {
var _paramValue = e.Link;viewer.LoadDocument("SectionReport2.rpx?parameter1=" + _paramValue + "&OutputFormat=Rdf3");return true;}});});}
重新打开主报表的方法如下:
protected void Page_Load(object sender, EventArgs e){if (!IsPostBack)
{SectionReport1 rpt = new SectionReport1();
WebViewer1.Report = rpt;Session["Report"] = rpt;
}}protected void btnLoad_Click(object sender, EventArgs e){WebViewer1.Report = ((GrapeCity.ActiveReports.SectionReport)Session["Report"]);
}
效果图:
示例下载:
VS2010 + .NET 4.0 + C# + AR8 SP1