You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:07:29