首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序式RDLC报告

程序式RDLC报告
EN

Stack Overflow用户
提问于 2016-08-19 15:23:38
回答 1查看 875关注 0票数 0

我在这里有点傻。我所见过的大多数教程都使用向导或内置(或现成)数据集创建报告。我在运行时使用查询构建数据集,因此我不太确定如何采用到目前为止所见过的查询。

通常,当我创建一个报告时,它是一个记录报告,RDLC文件中的字段可以很容易地使用参数填充。但是,下面我要做的工作类似于创建一个SELECT查询。所以我想做的是,我想做一份这样的报告:

代码语言:javascript
复制
Status: Approved
PID  |  Name   | Address
1    |  Name 1 | Address 1
2    |  Name 2 | Address 2
===========================
Status: Denied
PID  |  Name   | Address
3    |  Name 3 | Address 3
4    |  Name 4 | Address 4

我对此有几个问题:

  1. 我的RDLC报告存储在文件夹中的"\ reports“文件夹中,其中包含..vb/..resx文件。当我提到它使用Application.StartupPath & "\Reports\myReport.rdlc“时,它在那里找不到它(很明显)。有没有办法将报告文件嵌入到程序中(例如:使用相对文件夹名,我应该将RDLC文件夹/文件放在哪里)?我不认为我应该将RDLC文件传输到Debug文件夹中,这样才能完成这项工作(因此获得了完整的目录清单)。
  2. 在尝试使用上面的代码创建报告时,有什么好的方法可以采取呢?我在想,如果我沿着数据集循环并将值从那里作为参数传递给RDLC文件,它就会填充报告(就像我以前的一条记录报告一样),但情况似乎并非如此。
  3. 刷新报表查看器还会给我提供 数据源‘Dataset1 1’尚未提供数据源实例。

我在RDLC文件中创建了一个虚拟数据集,以便能够使用Tablix,就像我在几个线程中看到的那样。我非常希望我能够使用我从零开始创建的数据集,而不是使用向导。

私有子btnGenerateReport_Click(发送方作为对象,e作为EventArgs)将btnGenerateReport.Click Dim查询处理为String query = BuildQuery() SQLControl = New SQLControl Try = String.Empty,然后SQLControl.QueryParams(查询)如果SQLControl.SQLDS.Tables(0).Rows.Count >0,那么FetchData()如果结束,如果将ex捕获为异常MsgBox(ex.Message,MsgBoxStyle.Exclamation,“报表制造者”(Report)结束尝试End Sub Private () Dim dataSource As ReportDataSource Dim PID As Integer Dim Name As String Dim ApplicationStatus As String Dim Address As String rvPreview.Reset() rvPreview.LocalReport.ReportPath = "C:\Users\xxx\Documents\Visual 2015\Projects\My Project 1\My Project 1\Reports\myReport.rdlc“rvPreview.LocalReport.DataSources.Clear() dataSource = New ReportDataSource() _rparams = New List(( ReportParameter),其中SQLControl.SQLDS.Tables(0) For x为整数=0 To .Rows.Count -1 PID = .Rows(x).Item("PID") Name = .Rows(x).Item("LName") & ",“& .Rows(x).Item("FName") ApplicationStatus = .Rows(x).Item("ApplicationStatus") Address = .Rows(x).Item("StreetAddress") &”& .Rows(x).Item("City") _rparams.Add(New ReportParameter("PID",PID)) _rparams.Add(“Name”),(名称)_rparams.Add(新ReportParameter("ApplicationStatus",ApplicationStatus)) _rparams.Add(新ReportParameter (“地址”,地址)),每个param作为ReportParameter在_rparams rvPreview.LocalReport.SetParameters(_rparams)下一个x rvPreview.RefreshReport()以End Sub结尾

EN

回答 1

Stack Overflow用户

发布于 2016-08-27 21:44:25

在开始时,我必须提到我在C#中使用RDLC报告,但是解决方案在vb.net中应该是非常相似的。

  1. 我通常将每个报表作为单独的项目来准备(因此我对每个报表都有单独的DLL ),并且在这个项目中使用一个单独的类来处理我需要处理的所有报告。我将每个RDLC文件添加到项目下面(主报表文件和子报表文件)。在我的例子中,我可以像读取流一样读取每个RDLC文件,只需使用项目名称空间和RDLC文件名,如下所示 程序集= Assembly.GetExecutingAssembly();流= assembly.GetManifestResourceStream("Some namespace.Some report filename.rdlc"); 然后,我使用这样的代码将该流与报表查看器连接(此代码中的stream与上面的对象相同,但该代码位于另一个类中,它可以访问报表查看器对象)。 ReportViewerControl.LocalReport.LoadReportDefinition(new StreamReader(小溪);
  2. 您可以以非常简单的方式为报表提供DataSet。您可以为表使用System.Data.DataTable类的对象(在下面的代码中,我将这个对象称为yourTableObject ),对该表中的行使用System.Data.DataRow类。当您将所有数据放入表中时,可以使用如下代码将其提供给报表 //我使用DataSet1作为数据集名称,因为您在报表定义ReportDataSource rds =(“DataSet1”,yourTableObject)中使用了这个名称; 当然,提供的表应该具有与报表定义中的数据集相同的字段。
  3. 您必须向报表提供有效的DataSet。解决方案在第2点以上。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39042681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档