ActiveReports 10 SectionReport运行时传递Dataset方法咨询
嗨,放心,ActiveReports 10的SectionReport完全支持运行时传递Dataset,而且能在脚本里直接使用,我帮你把AR2的代码适配过来,再给你讲清楚脚本里的用法:
第一步:AR2到AR10的代码转换
你原来的AR2代码可以改成下面这样,完全适配SectionReport:
' 实例化SectionReport对象(AR10里要引用GrapeCity.ActiveReports命名空间) Dim rpt_Test As New GrapeCity.ActiveReports.SectionReport() ' 加载你的rpx布局文件 rpt_Test.LoadLayout(_ReportName) ' 直接设置数据源,可以是Dataset、DataTable或者DataView(和你原来的_dv兼容) rpt_Test.DataSource = _dv ' 如果你想直接传整个Dataset也可以:rpt_Test.DataSource = _dsDati ' 运行报表 rpt_Test.Run() ' 绑定到报表查看器 Me.Active_Rpt_Viewer.Document = rpt_Test.Document
第二步:在脚本里使用传递的Dataset
完全没问题,有两种常用方式:
方式1:直接通过报表的DataSource访问
在报表的脚本(比如某个Section的Format事件、报表的Start事件里),可以直接获取当前报表的数据源:
' 把报表数据源转成Dataset Dim ds As DataSet = TryCast(Me.Report.DataSource, DataSet) If ds IsNot Nothing Then ' 比如获取指定DataTable的数据 Dim targetTable As DataTable = ds.Tables("YourTableName") ' 在这里写你需要的逻辑,比如取值、计算等 End If
如果你的数据源是DataView,也可以直接转换:
Dim dv As DataView = TryCast(Me.Report.DataSource, DataView) If dv IsNot Nothing Then ' 可以通过dv.Table关联到对应的DataTable,进而访问整个Dataset Dim ds As DataSet = dv.Table.DataSet End If
方式2:通过自定义属性传递(更灵活)
如果想让脚本里的调用更直观,你可以给报表添加自定义属性,把Dataset传进去:
在你的业务代码里添加:
' 给报表添加自定义属性,把_dsDati传进去 rpt_Test.Properties.Add("ReportDataset", _dsDati)
然后在报表脚本里:
' 获取自定义属性里的Dataset Dim ds As DataSet = TryCast(Me.Report.Properties("ReportDataset"), DataSet) If ds IsNot Nothing Then ' 执行你的脚本逻辑 End If
一些注意事项
- 确保你的rpx报表的数据源设置为无,或者和你传递的Dataset结构完全匹配,避免字段不匹配的报错
- 一定要在
Run()方法之前设置数据源,不然报表会使用设计时的数据源(如果有的话) - 脚本里的
Me.Report就是当前的SectionReport实例,所有属性和方法都可以直接访问
内容的提问来源于stack exchange,提问作者Daniele P.
相关产品推荐
相关产品推荐

