找回密码
 立即注册

QQ登录

只需一步,快速开始

cuizhengrong

注册会员

9

主题

31

帖子

100

积分

注册会员

积分
100

活字格认证

cuizhengrong
注册会员   /  发表于:2024-10-28 21:37  /   查看:450  /  回复:4
1金币
业务场景:

      在VB.NET 程序中生成 Datatable,然后加载到 rdlx报表中显示出来(正常),点击按钮导出Excel(报错);

问题:
(1)把 datatable加载到 rdlx报表的时候可以正常加载并显示;
(2)但是生成excel报表的时候,系统报错“未设置数据,请指定一个数据集”

我的测试代码如下:

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       Try
           Dim f = "I:\Ex\test_ar18\test_ar18\bin\Debug\net8.0-windows\report\1.rdlx"
           Dim finfo As New IO.FileInfo(f)

           ' Provide the page report you want to render.
           report = New GrapeCity.ActiveReports.PageReport(finfo)

           ' 下面的代码加载 datatable:正常
           AddHandler report.Document.LocateDataSource, AddressOf Document_LocateDataSource

           ' 显示报表:正常
           Me.Viewer1.LoadDocument(report.Document)

           Dim reportDocument As New GrapeCity.ActiveReports.Document.PageDocument(report)

           ' Create an output directory.
           Dim outputDirectory As New IO.DirectoryInfo("C:\MyExcel")
           outputDirectory.Create()

           ' Provide settings for your rendering output.
           Dim excelSetting As New GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtensionSettings
           excelSetting.FileFormat = GrapeCity.ActiveReports.Export.Excel.Page.FileFormat.Xls
           Dim setting As GrapeCity.ActiveReports.Extensibility.Rendering.ISettings = excelSetting

           ' Set the rendering extension and render the report.
           Dim excelRenderingExtension As New GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension
           Dim outputProvider As New GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider(outputDirectory, IO.Path.GetFileNameWithoutExtension(outputDirectory.Name))

           ' Overwrite output file if it already exists.
           outputProvider.OverwriteOutputFile = True

           ' 这里生成电子表格的时候报错了: 未设置数据,请指定一个数据集
           reportDocument.Render(excelRenderingExtension, outputProvider, setting.GetSettings)
       Catch ex As Exception
           Text = ex.Message
       End Try
   End Sub

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

这个问题解决了;我的自定义按钮是加载了LocateDataSource事件的,只是这个事件是用来显示报表用的,当导出电子表格的时候,还需要再次针对reportDocument 对象触发LocateDataSource事件实现针对导出电子表格事件的数据加载;在我的测试中不需要 run()就可以,添加上也不会报错;

4 个回复

倒序浏览
最佳答案
最佳答案
cuizhengrong
注册会员   /  发表于:2024-10-28 21:37:02
来自 3#
这个问题解决了;我的自定义按钮是加载了LocateDataSource事件的,只是这个事件是用来显示报表用的,当导出电子表格的时候,还需要再次针对reportDocument 对象触发LocateDataSource事件实现针对导出电子表格事件的数据加载;在我的测试中不需要 run()就可以,添加上也不会报错;

评分

参与人数 1金币 +500 收起 理由
Felix.Li + 500 很给力!

查看全部评分

回复 使用道具 举报
wengMQ悬赏达人认证
银牌会员   /  发表于:2024-10-29 09:24:53
2#
自定义导出按钮没有加载LocateDataSource事件,也没有调用下Report.Run();有兴趣可以加我QQ546962925
回复 使用道具 举报
cuizhengrong
注册会员   /  发表于:2024-10-29 10:19:23
4#
谢谢网友 wengMQ的回复 !
回复 使用道具 举报
Felix.LiWyn认证
超级版主   /  发表于:2024-10-29 10:19:38
5#
大佬解决了就好

给您奖励金币
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部