Asp.net使用RDLC开发报表
至vs弃用水晶报表后,再加上水晶报表功能确实强大,但是有些地方使用,总感觉杀鸡焉用牛刀?于是就对RDLC报表做起来了研究,对于EDLC的报表,多多少少也用到了一项大大小小的项目上面,但是一直都都想弄一篇关于RDLC报表的心得跟大家一起分享,刚好今天有机会,就随便写一点东西,供大家参考,不对的地方请指正!
首先,第一步,不管怎么样,我们建立一个WEB工程,建立WEB工程这步我就省略了,现在直接报表的总纲。
首先注意一点,不过这点,我得好好研究一下,新建的“数据集文件”必须放在网站的根目录,否则报表找不到数据集,不知道为什么,我刚刚试了好几次,我以前的项目就不是这样的,等下回去看看以前的实例,在把这个BUG交代清楚。由于个人习惯,我建立的数据集都是自己手动建立,而不是采取的自动生成,好吧,现在接着上图:
第一步,建立数据集,如下图所示:
完成之后,直接右键,添加数据表----用数据集,生成表数据结构时方便。用其它的会有一大堆操作。
紧接着,我该上第二幅图了,请看:
完成之后修改Datatable的名字,然后右键,添加列,这里面的列当时根据你报表需要的需要的数据来添加就行了,十分简单。
再上两幅图:
添加完整后的效果:
接下来我们报表文件该上场了,这一步当然也是添加报表文件了,看下图(这里的报表文件不需要放在项目的根目录,所放位置可以随意)
输入完文件名称,点击确定后,如下图所示的效果:
选择报表,右键点击报表的内容,会出现很多了选择项,根据你的选择,添加你需要的数据,这里的选择,也可以在工具箱中找到,我们先添加一个文本,然后添加一个数据表,看图吧:
完成后,可以相应的设置文本这些,现在我就来做一些简单的设置,如下图:
添加完成之后,它会自动弹出如下图的这个界面:
由于我们先添加了数据集,所以没有弹出如下图的这种界面,这个地方,对于我今天讲解的来说不符合,如果弹出这个界面,我直接选择关闭,如果你是需要自动生成的,那么你可以跟着提示,一步一步配置,就可以得出相应的效果,上图:
到了这一步,在选择数据这里,根据自己的需要,进行相对应的修改,中间有一项,“数据源”,这里可以选择到程序中的数据源,根据自己的需求,选择对应的数据源,如下图所示:
选择完成之后,如下图所示:
这里可能会一个问题,那就是左边的报表数据选项卡可能会没有,如果没有,你可以根据下面的图把它设置出来,如果有,请挑开这一步:
如果你能看到这里,或者已经跟着上面的操作走到了这里,那我得恭喜你了,你能遇到的麻烦,都差不多已经解决了。因为新报表的时候,没有出数据,或者是其他的问题你已经解决了。相当初,我要想走到这一步实在是太难了,走过不少弯路啊,但是现在能和大家分享,希望大家不要走弯路。
还有一点,如果你的报表是中文的话,你最好把文字设置为中文的字体,因为这样可以避免出现乱码,出现乱码也只是偶尔,但是大家还是小心使得万年船。
现在我们来弄弄报表中数据吧,首先我们需要添加列,添加完成之后,可以点击列,选择数据源中的数据字段,还是上图,有图好说话:(表选中整列,点“Tablix属性”,可以看表的属性)
完成后的效果:
到了这里,报表设计已经完成,我们该把这个报表文件嵌入到aspx页面上去,这样才能展示效果,如果你用的是“窗体应用程序”,上面这几天都是一样的,唯一有差别的是展示的效果,但是后台代码都一样,完全可以通用的。
切换到aspx,在工具箱中找到报表的控件,把它添加到aspx页面上,如下图和代码所示:
<form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <rsweb:ReportViewer ID="ReportViewer1" runat="server"> </rsweb:ReportViewer> </form>
后台绑定一下,绑定代码如下:
private void ReportBind() { DataSet ds = new DataSet(); ds = GetProductReport(); if (ds == null) { this.ReportViewer1.LocalReport.DataSources.Clear(); this.ReportViewer1.LocalReport.Refresh(); return; } ReportDataSource objReportDataSource = new ReportDataSource("ProductData", ds.Tables[0]); this.ReportViewer1.LocalReport.ReportPath = @"ProductReport.rdlc"; this.ReportViewer1.LocalReport.DataSources.Clear(); this.ReportViewer1.LocalReport.DataSources.Add(objReportDataSource); this.ReportViewer1.LocalReport.Refresh(); } public DataSet GetProductReport() { DataSet ds = new DataSet(); //ds 获取数据查询的值即可 return ds; }
上面这个引用于:https://www.cnblogs.com/luxianai/p/2751057.html
**************************补充*************************************
1,关于参数
2,vb.net 的后台代码
Dim dt_pri As New DataTable
dt_pri.Columns.Add("per_ton", GetType(System.Double)) 'sql数据库中的numeric对应vb.net的Decimal类型
dt_pri.Columns.Add("type_price", GetType(System.Single))
dt_pri.Columns.Add("price_add", GetType(System.Double))
dt_pri.Columns.Add("pay_money", GetType(System.Double))
dt_pri.Columns.Add("type_name", GetType(System.String))
dt_pri.Rows.Add(24, 2.5, 3.6, 1.7, 8.4) '加入记录到表中
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.Refresh()
'System.Web.HttpContext.Current.Server.MapPath("~/inv_rpt.rdlc")
ReportViewer1.LocalReport.ReportPath = System.Web.HttpContext.Current.Server.MapPath("~/inv_prt.rdlc")
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", dt_pri))
Dim rptpars(0) As ReportParameter '参数数组 '因从0开始比总数,个数=值+1
rptpars(0) = New ReportParameter("t0", "132413-74817") '年月日 时
ReportViewer1.LocalReport.SetParameters(rptpars)
ReportViewer1.LocalReport.Refresh()
***************************其它补充************************
SSRS:关于“在 Web 窗体上报表查看器 Web 控件需要 System.Web.UI.ScriptManager”
报表在项目中设计好,发布到报表服务器后,在日常业务过程中,一般不会直接登录到报表服务器上去查看报表,而是通过第三方应用进行查看,一来方便系统集成、二来方便权限控制,我们需要通过ASP.NET应用程序来显示报表,操作过程如下:
创建aspx页面后,引入ReportViewer组件,两种方式:(1)手工输入代码,一定要注意添加引用、修改web.config;(2)直接从工具箱中拖动到页面,关于配置都会自动生成。(这个要省事多了),代码如下:
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"
Font-Size="8pt" InteractiveDeviceInfos="(集合)" ProcessingMode="Remote"
WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt">
<ServerReport ReportPath="/xxxx/FromReport" ReportServerUrl="http://localhost/reportserver" />
</rsweb:ReportViewer>
预览页面后,却出现了“在 Web 窗体上报表查看器 Web 控件需要 System.Web.UI.ScriptManager”这样的错误,
解决方案:
我们直接在页面中,添加如下代码:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
问题解决。
**************************************
rdlc文件,在生成时,文件属性中的“生成操作”选择“内容”。
不然,在项目生成的时候,系统会提示找不到文件。
标记下,以后方便查阅。