lsp 发表于 2015-7-24 09:58:00

报表脚本调用C#DLL方法的例子

帮助文档上显示在报表的脚本中调用C#代码,但没有找个一个比较完整的例子。有没有完整的例子提供一个学习一下。

我需要在钻取报表下一级报表加载之前更新一些数据源的内容。需要这样的功能。

frank.zhang 发表于 2015-7-24 11:19:00

您好,
经过电话沟通,需求为子报表拿到接受到的数据,引起一个触发的事件,在这个事件中可以完成其它的功能。

lsp 发表于 2015-7-24 11:29:00

对,我的程序要实现的逻辑是:
报表A点击一个单元格打开报表B,报表B接收到A的全部参数和点击单元格的数据信息,报表B根据这些信息请求服务器获取相关统计数据后展示。

frank.zhang 发表于 2015-7-24 13:58:00

您好,
这边实现的思路是:
1.将报表A的信息通过参数的方式传给报表B


2.报表B在加载数据时,获取收到的参数
      protected void WebViewer1_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
      {
            string connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};", Server.MapPath("/Data/NWind_CHS.mdb"));
            Access dl = new Access(connStr);
            if (args.DataSourceName == "SubDetail" && args.DataSetName == "SubDetailSet1")
            {
                /**
               * 可以做任何在子报表加载数据前的操作
               * */
                String Id = args.Report.Parameters.CurrentValue.ToString();
                string productSql = string.Format("select 产品.产品名称, 产品.单位数量, 订单明细.单价, 订单明细.数量, 订单明细.折扣 from 订单明细 inner join 产品 on 订单明细.产品ID = 产品.产品ID where 订单ID = {0}", Id);
                args.Data = dl.ExecuteDataset(productSql);
            }
            else
            {
                string productSql = string.Format("select 订单.* from 订单");
                args.Data = dl.ExecuteDataset(productSql);
            }

      }





希望能够帮助到您。

frank.zhang 发表于 2015-7-24 17:17:00

您好,
例子程序修改为winforms。


lsp 发表于 2015-7-28 17:25:00

追问一个问题,在LocateDataSource中怎么获取当前打开报表的文件名称?

frank.zhang 发表于 2015-7-28 17:40:00

您好,
非常抱歉,目前没有提供打开报表名称的方法。
现在采用的方式是用过DataSourceName和DataSetName来确定唯一的一个数据源。
args.DataSourceName == "SubDetail" && args.DataSetName == "SubDetailSet1"

希望能够帮助到您。

frank.zhang 发表于 2015-8-7 17:42:00

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢
http://gcdn.gcpowertools.com.cn/attachment.aspx?attachmentid=10062
页: [1]
查看完整版本: 报表脚本调用C#DLL方法的例子