ActiveReport 报表事件调用之动态脚本剖析

在C#下,有一个类库System.CodeDom.Compiler,非常强大。如,可用来动态生成dll,因此可以实现动态表达式、报表等函数,非常方便。AR的Section报表(区域报表)中有脚本,是通过System.CodeDom.Compiler实现的编译为dll,具体下面的实战步骤。<a href="http://www.grapecity.com.cn/image.ashx?picture=AR8_Script4.gif"><img title="AR8_Script" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="AR8_Script" src="http://www.grapecity.com.cn/image.ashx?picture=AR8_Script4.gif" width="488" height="242" /></a>

发布于 2014/03/26 00:00

ActiveReports

在C#下,有一个类库System.CodeDom.Compiler,非常强大。如,可用来动态生成dll,因此可以实现动态表达式、报表等函数,非常方便。AR的Section报表(区域报表)中有脚本,是通过System.CodeDom.Compiler实现的编译为dll,具体下面的实战步骤。

Step 1: 新建一个WindowsFormsApplication1的exe应用程序

Step 2: 新建SectionReport1.rpx区域报表,并在其Detail内拖入一个TextBox控件

AR8_Script

Step 3: 新建一个Model类,代码如下:

Code Snippet
  1. publicpartialclassModule1
  2. {
  3.     publicstring strCD;
  4.  
  5.     publicstring PrintReport()
  6.     {
  7.         strCD ="C#";
  8.  
  9.         return strCD;
  10.     }
  11. }

AR8_Script2

Step 4: 在SectionReport1.rpx的脚本中,添加如下代码:

WindowsFormsApplication1.Module1 mo = new WindowsFormsApplication1.Module1();

public void ActiveReport_DataInitialize()
{
    string s = mo.strCD;
    mo.PrintReport();
       
    ((TextBox) rpt.Sections["Detail"].Controls["TextBox1"]).Text = mo.strCD;    
}
 

雷区

  • 脚本,一定要注意大小写。如     ((TextBox) rpt.Sections["Detail"].Controls["TextBox1"]).Text = mo.strCD;
  • WindowsFormsApplication1.Module1 需要添加命名空间

AR8_Script3

Step 5: Form1添加Viewer,并在Load事件添加如下代码:

        private void Form1_Load(object sender, EventArgs e)
        {
            string url = @"..\..\SectionReport1.rpx";

            SectionReport Report = new SectionReport();
            System.Xml.XmlTextReader xtr = new System.Xml.XmlTextReader(url);
            Report.LoadLayout(xtr);
            //Report.AddScriptReference("System.Data.dll");
            Report.AddScriptReference("WindowsFormsApplication1.exe");            
            Report.Run();
            //Report.AddNamedItem()
            xtr.Close();
            viewer1.Document = Report.Document;
        }

 

结果如下:

AR8_Script4

 

说了半天,怎么没有看到Compiler的概念呢。

请看代码:

Code Snippet
  1. namespace Script
  2. {
  3.     using GrapeCity.ActiveReports;
  4.     using GrapeCity.ActiveReports.SectionReportModel;
  5.     using GrapeCity.ActiveReports.Data;
  6.     using GrapeCity.ActiveReports.Document.Section;
  7.     using System;
  8.     using System.Drawing;
  9.     using System.Diagnostics;
  10.     using System.Data;
  11.     using System.Collections;
  12.     using System.Collections.Generic;
  13.  
  14.     publicclassReportItems
  15.     {
  16.  
  17.         public GrapeCity.ActiveReports.SectionReport rpt;  //
  18.         public GrapeCity.ActiveReports.SectionReportModel.PageHeader PageHeader;
  19.         public GrapeCity.ActiveReports.SectionReportModel.Detail Detail;
  20.         public GrapeCity.ActiveReports.SectionReportModel.TextBox TextBox1;
  21.         public GrapeCity.ActiveReports.SectionReportModel.TextBox TextBox2;
  22.         public GrapeCity.ActiveReports.SectionReportModel.PageFooter PageFooter;
  23.     }
  24.  
  25.     //
  26.     publicclassReportScript : ReportItems
  27.     {
  28.         WindowsFormsApplication1.Module1 mo =new WindowsFormsApplication1.Module1();
  29.         publicvoid ActiveReport_DataInitialize()
  30.         {
  31.             string s = mo.strCD;
  32.             mo.PrintReport();
  33.  
  34.             ((TextBox)rpt.Sections["Detail"].Controls["TextBox1"]).Text = mo.strCD;
  35.         }
  36.     }
  37. }

 

在Report.Run();的时候,通过Compiler生成了如下的C#代码。区域报表,被封装为ReportItems类,报表脚本类集成自他ReportScript。

深入阅读:

1 帮助文档 ActiveReports 8 > ActiveReports User Guide > Samples and Walkthroughs > Walkthroughs > Section Report Walkthroughs > Script > Script for Simple Reports

2 帮助文档 ActiveReports 8 > ActiveReports User Guide > Samples and Walkthroughs > Walkthroughs > Section Report Walkthroughs > Script > Script for Subreports

3 ActiveReports 区域报表中的事件介绍

4 ActiveReports区域报表中运行时修改报表布局实现方法

5 ActiveReports区域报表中动态列报表实现方法

 

源码: C#、VS2013、AR8

ActiveReports 报表控件| 下载试用

ActiveReports 是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForm / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求,作为专业的报表工具为全球超过 300,000 开发人员提供了全面的报表开发服务。

您对ActiveReports产品的任何技术问题,都有技术支持工程师提供1对1专业解答,点击此处即可发帖提问>>技术支持论坛

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

活字格低代码二维码

关注“活字格低代码”

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态