VS2022 WinForms VB中ReportViewer报错:无法创建Orders数据集数据读取器
问题
VS2022 + WinForms + Visual Basic开发环境下,ReportViewer运行时报错:Cannot create a data reader for data set "Orders"。
用户代码:
Public Class RptFrmDelivery Private Sub RptFrmDelivery_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Orders.Fill(Me.DayOldDataSet.Orders) ReportViewer2.ProcessingMode = ProcessingMode.Local ReportViewer2.LocalReport.ReportPath = "../../Report1.rdlc" ReportViewer2.LocalReport.DataSources.Clear() ReportViewer2.LocalReport.DataSources.Add(New ReportDataSource("Orders")) ReportViewer2.LocalReport.ReportEmbeddedResource = "RptFrmDelivery.Report1.rdlc" ReportViewer2.RefreshReport() End Sub End Class
修复方案及排查点
核心问题分析
代码存在两个关键错误:
- 创建
ReportDataSource时未传入实际数据集数据,报表无法获取有效数据源 - 同时设置
ReportPath和ReportEmbeddedResource,两种报表加载方式冲突
修复后的代码示例
Public Class RptFrmDelivery Private Sub RptFrmDelivery_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' 填充数据集 Me.Orders.Fill(Me.DayOldDataSet.Orders) ' 配置本地报表模式 ReportViewer2.ProcessingMode = ProcessingMode.Local ' 二选一:使用嵌入式资源加载报表(需确保报表生成操作设为嵌入资源) ReportViewer2.LocalReport.ReportEmbeddedResource = "你的项目命名空间.Report1.rdlc" ' 或者使用文件路径加载报表(发布时需包含报表文件) ' ReportViewer2.LocalReport.ReportPath = "../../Report1.rdlc" ' 绑定数据源:传入数据集的DataTable对象 ReportViewer2.LocalReport.DataSources.Clear() ReportViewer2.LocalReport.DataSources.Add(New ReportDataSource("Orders", Me.DayOldDataSet.Orders)) ' 刷新报表 ReportViewer2.RefreshReport() End Sub End Class
额外排查点
- 数据集名称匹配:确认报表设计器中数据集名称与代码里的
"Orders"完全一致(大小写敏感) - 数据集填充验证:在
Fill方法后加断点,检查DayOldDataSet.Orders.Rows.Count是否大于0,确保数据已正确填充 - 嵌入式资源配置:右键报表文件→属性,将“生成操作”设为“嵌入的资源”,并确认
ReportEmbeddedResource的命名空间格式正确(项目根命名空间+报表所在路径+报表文件名) - 报表路径正确性:若使用
ReportPath,确保相对路径指向正确文件,可临时改用绝对路径测试
内容的提问来源于stack exchange,提问作者Wilest
相关产品推荐
相关产品推荐

