← 返回所有博客文章

钻取报表的作用?

添加钻取功能使报表更加的灵活易用。它可以使用户查看感兴趣数据的更详细信息,对用户理解数据有很大的帮助。

本文即将阐述如何在 FlashViewer 中使用 客户端API 实现钻取功能。

我们需要做如下工作:

在我们实现该功能之前,我们需要了解相关的接口信息:

RpxHandler: RpxHandler 用于加载 RPX 文件到 ActiveReports 报表中,加载和导出报表到特定的格式,默认值为HTML。我们将使用它加载子报表到报表浏览器中。从主报表中传递参数,并且展示相关子报表到 FlashViewer 中。

OnLinkClick(LinkEventArgs):当点击报表链接时触发此客户端事件。

Parameters: 我们需要将链接信息作为参数传递到子报表中。正如前文所提,参数将由 RpxHandler 进行传递。

让我们先预览本文中例子中实现的效果图:

InitialDisplay

 

实现方法

设置 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"]);
}

 

效果图:

DrillDown

示例下载:

VS2010 + .NET 4.0 + C# + AR8 SP1