rdlc报表制作详细步骤
- 格式:doc
- 大小:555.00 KB
- 文档页数:32
需求是这样的:我有一个DataSet,其中有一个DataTable,这个DataTable是根据调用存储过程不同的参数而生成的数据集,其列是可变的。
现在需要为这样的数据集做一个简单的报表。
你不可能为一个可变列的DataTable设计一个固定的rdlc报表文件,因为column是动态的,可能是2列,可能是3列,可能是10列,列名也不同,
目前的办法也只能是根据DataSet,动态创建rdlc,然后再绑定到ReportViewer上。
不知道还有其他更方便的方法。
下面两篇文章介绍了动态创建rdlc报表,绑定任意Dataset的方式,并结合xslt控制显示的样式外观,感觉还是很不错的
第二个链接是修正版本。
Generate a RDLC dynamically for the VS 2005 Report Viewer Control
Revised Dynamic RDLC Generation
我自己做了一个demo试了一下
效果还是不错的。
关于VS2010RDLC报表的详细使⽤说明各位技术屌丝们好,之前我⽤了很长⼀段时间通过不断的研究揣摩,终于把RDLC报表给搞透了,今天跟⼤家做个总结,希望能够帮助到⼤家。
需求分析我想把datagridview 中的数据打印出来。
⾸先新建⼀个winfrom 窗体第⼆部将数据填充到datagridview中现在我要做的是把datagridview中的数据打印出来。
打印之前⾸先建⽴⼀个窗⼝,专门⽤于存放打印控件注意红⾊标记的地⽅,尤其是访问级别处最好给public 避免出现访问不了现象。
图解:新建俩个⽂件夹。
report存放报表⽂件。
RDataSource存放数据源图解:新建⼀个数据源及⼀个报表⽂件。
新建⼀个数据表,主要⽤于报表上的传值。
由于我的数据源中只有俩个字段,所以在这⾥对于新增相同名称的字段,需要注意的是datatype这个地⽅,对于设置的数据类型新增表后会出现需要你选择数据源的地⽅,这个地⽅默认是引导新建,我们刚刚⼿动新增了我们的数据源所以这⾥我们选择以下图。
注意这是关键,不然你的数据获取不到。
⽤对象类型。
我们新增的数据源在对象⾥⾯会体现出来,需要注意的是只选择Rdataset (左)下⾯的不需要选择。
点击完成这⾥为了⽅便起见我起了跟数据源相同的名称。
这⾥数据源已经出来了,还有我们只新增了⼀个数据集(可⽤数据集)在dataset⾥⾯可以新增多个数据集,不过引⽤的时候需要注意下这⾥的可⽤数据集。
因为我们刚刚引⽤了数据源,所以在这⾥也已经有了。
报表的设置基本好了,这边报表的设计好不好看,完全取决于你的审美啦。
这⾥我们在datagridview中新增⼀个事件需要引⽤using Microsoft.Reporting.WinForms;基本到这⾥就算完成了,试着F5下吧。
直接打印即可啦!!!!花了⼀中午的时间做的教程,希望能够帮助到各位苦逼的程序员屌丝們,如果你看了对你有帮助的话同事也希望帮助到其他新⼿的话,请加⼊我们的群:28851380问题及处理⽅法找不到报表解决办法如果报表设置不是很⼤的话可以采⽤始终复制哦,如果很⼤的话就使⽤复制最新的。
利用ReportViewer生成RDLC报表报表是应用程序,特别是数据库系统中的重要功能。
在Visual Studio 2010中,自带的ReportViewer控件,可以满足常用报表功能的实现,而且使用方便,以下就将介绍利用VS2010中的ReportViewer控件创建RDLC报表,并在winform程序中调用的实例,使用C#语法。
第一步:创建一个Windows应用程序在Visual Studio 2010中,选择“文件”菜单,新建-“项目”,从已安装模板中选择Visual C#,从中间的项目类型中,选择“Windows窗体应用程序”;在名称栏中,为项目指定名称;在位置栏中,指定想要保存的目录。
完成之后,项目中会有一个Form1,以下从对它的窗体设计器开始讲解。
像下面这样修改Form1的属性,当然也可以保留默认属性:Form1.Text = "MS Reporting Services 101 with Smart Client"Form1.Size = 750, 300第二步:为窗体(Form)添加报表查看器(Report Viewer)报表查看器,我们可以把它理解为显示和预览报表的容器。
它不仅可预览输出报表,还可帮助将报表信息生成各种格式(PDF或Excel等等),当然也包括打印功能。
请按如下步骤在Form1上放置好报表查看器控件:依次找到工具箱(ToolBox)――报表--报表查看器(ReportViewer),并把它拖到Form1上。
这会创建一个名为reportViewer1的新实例。
通过设置reportViewer1.Dock = Fill,报表查看器将会填充窗体的整个区域,以显示报表。
在完成第一步与第二步之后,窗体看起来应该如图1所示:图1第三步:为项目添加数据集(DataSet)数据集是伴随报表查看器而来的,它保存并提供从数据源而来的原始数据,我们便可对这些原始数据进行处理或在C#程序中输出。
[原创]RDLC报表系列(五)RDLC报表分组-⼤熊的空间-博客园[原创] RDLC 报表系列(五) RDLC报表分组本⽂只代表作者在⼀定阶段的认识与理解。
⼀、写作前提在我的博客园中我写了关于⼀些RDLC报表的使⽤,请参考这⾥。
因为没有时间,所以没有导⼊到我的个⼈博客中。
在博客园中相关⽂章如下:[原创] RDLC 报表系列(⼀)创建⼀个报表[原创] RDLC 报表系列(⼆)报表中插⼊图⽚[原创] RDLC 报表系列(三)参数、常量及常⽤表达式的使⽤[原创] RDLC 报表系列(四)⼦报表的使⽤⼆、本⽂内容1. 加载RDLC报表数据2. 实现数据分组3. 总结4. 代码下载(下载)三、加载RDLC报表数据我们的⽰例是要从学⽣表中,取出200条学⽣信息,然后加载到RDLC报表中。
01using System;02using System.Collections;03using System.Configuration;04using System.Data;05using System.Linq;06using System.Web;07using System.Web.Security;08using System.Web.UI;09using System.Web.UI.HtmlControls;10using System.Web.UI.WebControls;11using System.Web.UI.WebControls.WebParts;12using System.Data.SqlClient;13using System.Collections.Generic;14using System.Xml.Linq;15using Microsoft.Reporting.WinForms;16using RCLC.DataEntity;1718namespace RCLC19{20 public partial class_Default : CustomPageBase21 {22 protected void Page_Load(object sender, EventArgs e)23 {2425 }2627 protected void ButtonReportGenerate_Click(object sender, EventArgs e)29 List<ReportDataSource> reportDataSource = new List<ReportDataSource>();30 RportDataSet ds = new RportDataSet();31 string templatePath = string.Empty;32 string totalRecords = string.Empty;3334 //获得数据35 SqlConnection conn = newSqlConnection(ConfigurationManager.ConnectionStrings["LoggingConnectionString"].ConnectionString);36 SqlCommand command = conn.CreateCommand();37 mandType = CommandType.Text;38 mandText = "SELECT TOP 200 * FROM T_STUDENT";39 SqlDataAdapter da = new SqlDataAdapter(command);40 da.Fill(ds.T_STUDENT);4142 //指定报表模板43 templatePath = "ReportTemplate/StudentReport.rdlc";4445 //把获取的数据集合提供给在报表中名为RportDataSet_T_STUDENT数据集46 reportDataSource.Add(new ReportDataSource("RportDataSet_T_STUDENT", ds.T_STUDENT));47 List<ReportParameter> parameterList = new List<ReportParameter>();48 ////Generate Report,报表可以⽣成PDF,EXCEL及以其它形式,根据需求去设置49 GetReportMultipleDataSourceFile(reportDataSource, templatePath, parameterList, "pdf");50 }51 }52}上⾯的代码已经获取到200条学⽣的信息,然后把数据从数据库中取出然后加载到StudentReport.rdlc 报表中,下⾯要做的事情就是对数据进⾏分组了。
RDLC报表1.1简介在visual studio 2005之前,微软提供了一个报表服务(Reporting Service),其中也提供了报表自定义语言Report Definition Language, RDL语言),其报表定义为.rdl文件;Microsoft提供了针对这种报表的设计器,并且提供了在并提供了在WinForm和WebForm中使用这种报表的能力.微软定义了RDLC (Report Definition Language Client)也就是报表定义语言的客户端也称本地报表,该报表的后缀为.rdlc.本地报表和服务器报表存在一定的区别。
服务器报表rdl是指那些针对报表服务部署在服务器端的报表。
当报表被许多用户访问、报表以发布在报表服务器上,将其包含在所创建和部署的应用程序中、报表中有复杂的查询或者包含数据量大导致应用程序所在计算机的系统资源超载时,用报表的远程处理比较合适。
本地报表rdlc是指在本地的一些报表,在使用报表不一定要依赖于SQL Server,而是可以自主生成一些数据源然后以报表的方式显现出来。
本地处理模式的功能不及远程处理功能强大,适合中小型好报表和数据集的应用程序。
如果和rdl比较,rdlc可以看成是一个轻量级的报表。
在展现报表的时候我们需要使用到的一个控件叫ReportViewer,这种控件可以展现rdl报表,也可以展现rdlc报表。
从其属性可以看出,ReportView.ServerReport是针对rdl报表的,而ReportViewer.LocalReport是针对rdlc报表的。
1.2RDLC功能RDLC报表提供了以下主要功能:1、含有简单易用尤其是Table控件,非常方便字段在报表上的排列。
2、灵活的可定制性,用XML来实现通用的报表打印,可以用XML完全可以实现一个基于RDLC的报表设计器,这样可以让终端用户参与到报表的设计中,至少可以使他们能够修改报表中一些标题、表头等3、高度可编程性,在你的项目中,甚至不需要有一个报表文件,通过代码就可以实现报表生成、预览和打印等一系列操作;4、支持数据钻取功能;钻取报表是通过设置Navigation(HyperLink)和Parameters 来实现的,而具有子报表的钻取报表实现的功能类似Excel中数据透视表(Pivot Table)的功能,在一个复杂的交叉表中可以进行时间和商品两个维度的向下钻取。
RDLC报表系列(六)多图表-折线图和柱状图
美好的⼀天开始了,这篇是RDLC系列的最后⼀篇⽂章,我的⼩项⽬也已经release,正在测试中。
1.新建demo3.aspx和demo3.rdlc⽂件
2.往rdlc⽂件中拖⼀个图标控件,在弹出的窗⼝中选择某⼀类“柱状图”,点击确定
3.在底部的“将类别字段拖⾄此处”区域选择你要分类的字段,这⾥为【FiscalMonth】
4.在上⾯的“将数据字段拖⾄此处”区域选择你要显⽰的数据字段,并将函数Count改为Sum,这⾥[Sum(Actual)]和[Sum(Budget)].
5.在[Sum(Budget)]字段上右击->更改图标类型,弹出的窗⼝中选择希望显⽰的类型,这⾥为折线图。
6.这样就配置完成了,F5运⾏测试,可以了。
开发环境;vs2008中rdlc报表
矩阵是数据绑定报表项,其中数据排列于列和行相交的特定数据点。
矩阵提供的功能与交叉表和透视表类似。
与包括一组静态列的表不同的是,矩阵的列可以是动态的。
可以定义包含静态和动态的行和列的矩阵。
1.从工具栏中拖动矩阵到报表主体上
2.选中一行或一列,点击右键,在弹出框中选种添加行组或添加列组,来添加数据的行
和列
3.选中数据区,点击右键,选中“添加列”,就可以添加在如图中的“单价”和“金额”
4.选中要分类统计的类别,点击右键,选中小计,则自动添加小计
5.点击“编辑组”,来设置分组的依据
6.点击“属性”,来设置显示的内容
7.在数据区最好用sum(字段) ,这样小计才能统计
8.效果图:
表结构: tempId, 产品类别, 产品名, 品牌, 单价,数量,部门
1 低值易耗品 1.2米长条台其他115 3 总部\市场部。
RDLC 报表开发一、打开Visual Studio 2005,新建 网站,添加数据集,会自动调出数据集配置窗口TableAdapter如果上面的窗口没有自动调出,可以如下图可以调出上面的TableAdapter 窗口二、新建立数据库连接下面的这一步会将数据库连接保存到config 文件中下面的这一步可以,选择生成SQL的方式让我们先回到SQL Server Query Analyzer打开SQL Server 查询分析器在SQL程序中创建如下图的存储过程然后回到Visual Studio 2005,选择使用现在的存储过程,下一步,在这里,我们只需要选择所需要的存储过程,如刚才建立的EmployeeReport 即可完成TableAdapter向导的配置三、添加报表项创建报表项后,从左边工具栏拖动一个Table 到报表设计器中,选择网站数据集中的字段,把它拖动到表格的列中,通过页眉页脚可以设置复杂的打印样式。
四、新建立一个ASPX页面,拖动一个Report Viewer控件到页面中,在ReportViewer任务窗口中,选择刚才建立的rdlc文件,生成解决方案,然后执行就完成了报表开发。
[ 注意:如果此处报“未能找到在ObjectDataSource ObjectDataSource1 的TypeName 属性中指定的类型”的错误,说明数据源配置不正确,可以选择正确的配置即可。
]五、注意1. 刚才的SQL 脚本CREATE PROC EmployeeReportASSELECT * FROM EmployeeGO实际的报表开发中,一定不要用SELECT * ,只取报表中需要查看的字段。
2. 有时候,可能需要用户选择一些条件,有选择性的查看报表。
而不是全部绑定数据如上图,用户可能只需要查看2008-9-29至2008-9-30时间段之间的数据则作法如下:先建立好如上图的ASPX页面,在View Report 事件中写如下的程序ReportViewer1.LocalReport.ReportPath = AppDomain.CurrentDomain.BaseDirectory + "/Report/Request.rdlc";DateTime dtFrom =Convert.ToDateTime(txtDateFrom.Text);DateTime dtTo =Convert.ToDateTime(txtDateTo.Text);string requester = txtRequester.Text;string dept = txtRequestDept.Text;string material = ddlMaterial.SelectedValue;string iprstatus = ddlStatus.SelectedValue;DataTable reqrpt = ReportDB.RequestReport(dtFrom, dtTo, material, dept,requester, iprstatus);if (reqrpt != null){ReportViewer1.LocalReport.DataSources.Clear();ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("Request_RequestReport", reqrpt)); ReportViewer1.LocalReport.Refresh();}ReportViewer1.LocalReport.Refresh();根据用户所选的参数,把数据值传到SQL语句中即可.下面是RequestReport方法的源码DataTable RequestReport(DateTime dtFrom, DateTime dtTo, string pMaterial, string pDept, string pRequester, string pIPRStatus) {string MySQL = Purchase;string whDate = " RequestDate BETWEEN '{0}' AND '{1}' ";MySQL = MySQL + string.Format(whDate, dtFrom, dtTo);string whMaterial = " AND MaterialCode='{0}' ";if (pMaterial != "ALL"){MySQL = MySQL + string.Format(whMaterial, pMaterial);}string whDept = " AND RequestDepartment='{0}' ";MySQL = MySQL + string.Format(whDept, pDept);string whRequester=" AND Requester='{0}' ";if(pRequester!="ALL")MySQL = MySQL + string.Format(whRequester, pRequester);string whIPRStatus = " AND IPRStatus={0} ";if (pIPRStatus != "ALL"){MySQL = MySQL + string.Format(whIPRStatus, pIPRStatus);}IDataProvider privider = DataProvider.CreateDataProvider();DataSet ds = privider.RetriveDataSet(MySQL);if (ds != null && ds.Tables.Count > 0)return ds.Tables[0];elsereturn null;}const string Purchase="SELECT SerialNO,LedgerAcc,CostCenter,Requester,"+" RequestDate,RequestDepartment,MaterialCode, " +" Brand,Specifications,Unit,Quantity,Usage, "+" ExpectedDeliveryDate,Currency "+" ,Quotation1Supplier,Quotation1UnitPrice,Quotation1Amount, "+" Quotation2Supplier,Quotation2UnitPrice,Quotation2Amount, "+" Quotation3Supplier, Quotation3UnitPrice, Quotation3Amount, "+" ProposedQuotationSupplier, ProposedQuotationUnitPrice, "+" ProposedQuotationAmount,QuotationRemarks ,IPRStatus,QtyTo, UnitPriceTo FROM IPR WHERE ";3. 设计报表时,可以用上述的方法,实际运行时,可以替换成SQL 语句,传到ReportDataSource中即可,只要相应的表结构字段是存在的。
RDLC+存储过程C# .Net报表设计方法bdQuaker 2013-01-071RDLC+存储过程通用设计方法测试数据库:OPMS_TEST;存储过程:P_XXX_AliasPortCode;RDLC+存储过程设计步骤如下:把报表工具箱中的ReportViewer拖到WinForm窗体里;选择“设计新报表”;添加数据源;在弹出的“数据源设计”窗口中,选择“数据库”,下一步;“数据集”,下一步;选择数据连接,下一步;选择存储过程,在这步里我能看到我在数据库里写的存储过程selectib;选择完成,返回选择数据源,为数据源命名DataSetHan;为数据集命名:dsTestHan(解决方案中名称dsTestHan.xds);在数据集设计器中,添加存储过程表适配器:添加TableAdapter;选择数据连接;选择命令类型:使用现有存储过程;选择存储过程,insert、update、delete不用设置,下一步;默认设置,下一步;完成;报表数据窗口,新建“数据集”;2RDLC设计原理流程图3“Resources”参数中指定了多次在resources 参数中指定了多次。
resources 参数不支持重复项—解决方法做项目的时候,有时同一个项目的两个或多个窗体的功能,控件大部分都一样。
于是偷个懒,做好一个窗体后,其余的都复制过去。
到生成时会报个错误“Resources参数不支持重复项”“obj\Debug\****. ****. WinForms. ***. Frm**.resources”在“Resources”参数中指定了多次”。
本人最近也遇到了这个错误,总结了一下。
由于只是把窗体复制过去了,代码与原来的一样。
首先,要把复制的类名改成别的(public partial class和partial class两个),构造函数也要改过来,注意是自己改,不要用编辑器帮你改,不然编辑器会把原来的也改掉(包括引用),你还要把原来的再改过来。
1.新建一张rdlc报表,如下图
2.选择数据源
3.在弹出框中选择要加入的dataset
4.在报表项中选择你所需要的报表项,拖到报表主体中
5.在表头中输入列名,详细信息中帮定你要统计的数据明细(用sum(字段)),表尾中显示要统计的整列数据的总和(用sum(字段)),如果要对某一类进行统计,则选种详细信息列,右键,点击“插入组”,如下图
在组的分组中,设置要分组统计的字段。
如图:绿色的是插入的组统计,红色的是表尾统计
6.新建testReport.aspx 文件,在工具栏中,把报表控件MicrosoftReportViewer拖到该页面中,如下图:
7.在reportViewer 控件中,选择报表,选择上面建的报表testReport.rdlc
8.在testReport.cs文件中绑定数据代码如下:
9.效果图:
二.报表传参数
1.选择报表—>报表参数如下图:
2.弹出报表参数设置的窗口,添加参数BudgetIdPar,设置数据类型为Integer,具体如下图:
3.报表建好后,将报表设置到test.aspx页面中,在.aspx页面中加textbox ID为“txtParm”,确定按钮,如下图
4..cs文件中,确定按钮的事件如下:
5.运行界面如下:
三.子报表。
使用RDLC报表(一)1 建立数据源启动VS2005新建一个窗体项目,命名为TestProj在左边的窗体内选择“添加新数据源”或在菜单上操作“添加新数据源”:选择后出现对话窗体,选择“数据库”,进入“下一步”:本数据源以SqlServer2000所提供的Northwind数据库为例,因此在数据库内选择驱动程序为SqlServer,具体操作视所用数据库而定(如果连接为Oracle,建议用Oracle所提供的ODP for .NET,地址:/technol ogy/global/cn/software/tech/windows/odpnet/index.html)。
选择数据源后,指定数据库文件,并进行测试,如果连接不通,请检查你的软件设置。
进行下一步,至显示出库文件内的表及视图,然后打开表,并选择其中的Employ ees,选择完成。
在数据源窗口中显示出所选择表及表内的字段,以备使用。
同时在资源管理器中,也可以看到新增加的数据文件。
2 报表浏览器在新建的窗体内,放入报表浏览控件:此报表浏览控件集成了报表查看及打印预览的功能,可直接输出至打印机,也可直接输出至Excel文件或PDF文件,对于喜欢看Excel表格的客户来说,这个报表控件非常不错。
关于此报表的来源及台前幕后的各种说法,请自己查询相关的网站。
3 建立报表文件选中报表浏览器控件后,在控件的右上角会出现一个小三角,点击后,出现一个菜单,选择“设计新报表”或在解决方案资源管理器中添加一个新的报表文件:双击“报表项”内的“表”,则设计空白表内生成一个表格,我们可以在表格内添加数据项。
此报表的设计方式类似于MS以前的VB下报表设计环境。
在报表设计器中,我将一份报表分为五个部分,从上至下为:报表标题区、列标题区、数据显示区、合计及页脚。
如果将报表的设计形式显示出页眉及页脚,报表的形式会看得更清楚些:选择页眉及页脚:显示结果:现在开始设计报表:在“页眉”区内放入一个文本框,将内容更改为“测试报表”,居中,字体放大加粗:从数据源窗口中选择合适的列,用鼠标拖到报表内的“详细信息”表格上,数据会自动填入:将设计的报表保存后,返回报表浏览窗口,并为报表浏览器选择我们设计的报表:选中报表文件后,菜单也有所改变:再为此报表文件指定数据源,选择数据源:确定,保存文件并运行测试文件。
1.创建报表首先,创建数据源(连接数据库或者直接在工程添加DataSet),在此以DataSet 为例。
向工程添加数据集DataSet,再向数据集添加数据表DataTable,在表中添加字段(点击某一字段,选择属性可以修改字段类型)。
这样数据源就那立好了。
如下图所示:然后,在工程添加rdlc报表,在报表中添加表,在表中设置相应的显示字段如下图所示:最后,Form中添加报表浏览器ReportView,并且在ReportView对象的右上角点击小三角型,设置上面做好的rdlc报表如下图所示:如果数据源为DataSet,就要手动添加数据参考代码段如下:DataRow dr6 = ds1.Tables[0].NewRow();dr6.SetField("Name", "陈娇");dr6.SetField("Address", "广东增城新塘");dr6.SetField("Sex", "女");ds1.Tables[0].Rows.Add(dr6);this.reportViewer1.LocalReport.DataSources.Clear();this.reportViewer1.LocalReport.DataSources.Add(newMicrosoft.Reporting.WinForms.ReportDataSource("DataSet1", ds1.Tables[0]));this.reportViewer1.RefreshReport();2.添加字段(列)注意:在数据源的数据表中添加字段后,要在“视图”—“报表数据”弹出的界面中刷新数据源才能在报表只使用3.报表分组3.1基本分组在报表中右键点击数据单元格(设置好数据字段的单元格)选择“添加组”—“下方相邻”,如下图所示:然后就设置新添加的组,旧的字段就可以手动删掉了另外也可以右键点击行组,进行添加分组,如下图所示:3.2分组统计右键点击某一组的数据字段,操作界面如下图所示:然后在添加的行上右键点击“文本框属性”设置表达式,操作界面如下图所示:最终效果如下图所示:。
RDLC报表使用步骤主要介绍使用业务对象数据进行报表设计的过程。
(1)在项目上右击,添加报表。
(2)打开报表属性对话框(3)添加Model程序集引用(4)重新生成Model,这样的话,点击菜单上的“数据”,才会有添加数据新数据源和显示数据源项。
(5)若界面上没报表数据工具条,则点击菜单上的视图,报表数据,这样就调出了报表数据工具条。
若界面上有的话,此步省略。
(6)在菜单上选择数据,添加数据源,在弹出的对话框选择对象,然后即可选择Model 下的字段了。
(7)在报表工具表上,点击新建,添加数据集,弹出对话框,给数据集命名,并选择相应的Model。
(8)到此为止就可以报表的设计了。
报表的布局,想怎么弄就怎么弄吧。
(9)报表设计好了,需要给一个浏览报表的窗口,提供这个功能的就ReportView控件,在工具箱中可以找到,托到一个Web页面上即可。
还要加一个”ScripManager”控件,这个控件是在AJAX Extensions项下面,只要托到页面上即可,不用管它了。
(10)接下来需要给ReportView控件配置数据源了。
有两种方法。
一种是像给GirdView、FormView选择数据源一样,点击ReportView控件右侧的三角形符号,弹出一个小窗口,选择新建数据源,选择对象,然后选择BLL下的方法即,这将自动将ObjectDataSource加入到这个页面来。
第二种方法,是通过手写代码来配置数据源,这种方法适应比较复杂的情况,比如你需要对List集合下的字段进行改动,再配置给ReportView。
后面我给了一小段代码,这段代码是如何将报表按照数据库中的址将图片加载到报表中的,很典型。
(11)这样就做好了,接下来是发布了。
(12)注意,发布后,必须将RDLC报表拷到发布的目录下,覆盖掉发布过程中生成的RDLC 文件(这个文件只有1K)。
存在的问题RDLC这种报表,不支持直接打印。
必须将报表导出到PDF WORD EXCEL中。
这段时间看了一下VS2010rdlc报表,供大家参考一下。
运行结果为下图form中的两个textbox是设定RIGHT LEVEL范围程序根据这两个textbox的值产生报表赶快记录下来1. 首先建立一个工程文件2. 创建完成后就将ReportViewer拉到form中如下图所示3. 再给form中建立一个textbox和botton 作为后续添加条件用4. 建立一个新的报表在ReportViewer控件右上角点击如下图所示选择“设计新报表”5. 自动弹出让你建立数据源配置向导,这里我是用DBMAKER作为数据源,配置好数据源会出现下图供选择数据表6. 选择其中一个表USER进行操作然后按照提示就好。
7. 数据源配置和资料表也配置好了就该进行重要的一步,选择报表!在ReportViewer的右上角点击“小三角” 选择刚才配置好的报表。
到这里基本就可以出报表了,可是我们的目的是加条件对数据库的内容筛选后输出报表。
就要在通过下面的步骤达到目的了选择第一个“在DataSet设计工具中编辑查询” ,然后在下图的菜单上右键选择"加入"或者"设定"(不知什么原因我的电脑在接下来容易卡退)添加查询语句如下图所示SQL语句中的?和不同的数据库有关系我采用DBMAKER 而SQLServer用”@控件“ ,然后按照提示完成即可修改好入下图所示然后函数里有参数了。
最后一步修改代码private void button1_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(p1.Text.Trim()) &&string.IsNullOrEmpty(p2.Text.Trim())){ERTableAdapter.Fill(ER);//这是不含参数的方法this.reportViewer1.RefreshReport();}else if(!string.IsNullOrEmpty(p1.Text.Trim()) &&string.IsNullOrEmpty(p2.Text.Trim())){// TODO: 這行程式碼會將資料載入'ER' 資料表。
动态生成rdlc报表(原创)动态生成rdlc 报表(原创)因为公司需求研究微软的Reportviewer 因为有许多特别要求所以动态调用比较灵活我的需求是根据数据不同的合并表头(参考了随心所欲的博客文档再次表示感谢)string cCount = "";string dCount = "";string jCount = "";protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){string id = Request.QueryString["OrderID"] == null ? "1" : Request.QueryString["OrderID"].ToString();SqlConnection con = new SqlConnection("server=CHEN ZQ;uid=sa;pwd=luca623;database=luca");SqlDataAdapter sda = new SqlDataAdapter("select * fro m view_Order where C_orderID='" + id + "'", con);DataSet ds = new DataSet();sda.Fill(ds);cCount = ds.Tables[0].Rows[0]["C_CTime"].ToString();dCount = ds.Tables[0].Rows[0]["C_TTime"].ToString();jCount = ds.Tables[0].Rows[0]["C_DTime"].ToString();复制代码//这段代码是最重要ReportViewer1.Reset();this.ReportViewer1.LocalReport.LoadReportDefinition(G enerateRdlc());ReportViewer1.LocalReport.DataSources.Clear();复制代码//Orders_DataTable1 数据源名字必须和此报表原绑定的数据源名相同this.ReportViewer1.LocalReport.DataSources.Add(new R eportDataSource("Orders_DataTable1", ds.Tables[0]));this.ReportViewer1.LocalReport.Refresh();}}//这个方法就是自定义报表的样式public MemoryStream GenerateRdlc(){XmlDocument sourceDoc = new XmlDocument();string path = AppDomain.CurrentDomain.BaseDirectory + "Orders.rdlc";//c_CTime = ds.Tables[0].Rows[0]["C_CTime"].ToString();sourceDoc.Load(path);//下面就是xml操作了没必要看我的根据自己的需求而做XmlNode xHeader = sourceDoc.ChildNodes.Item(1).Chil dNodes.Item(13).ChildNodes.Item(1).ChildNodes.Item(0).Chi ldNodes.Item(4);XmlNode xCells = xHeader.ChildNodes.Item(0).ChildNod es.Item(0).ChildNodes.Item(0);//建设期XmlNode xmlCell = xCells.ChildNodes.Item(1);XmlElement xeCol = sourceDoc.CreateElement("ColSpan ");xeCol.InnerText = cCount;xeCol.InnerXml = cCount;xmlCell.InnerXml += xeCol.OuterXml;XmlNode xmlCellValue = xmlCell.ChildNodes.Item(0).Chi ldNodes.Item(0).ChildNodes.Item(4);xmlCellValue.InnerXml = "建设期";xmlCellValue.InnerText = "建设期";XmlNode xnRemove;for (int i = 0; i <int.Parse(cCount) - 1; i++){xnRemove = xCells.ChildNodes.Item(2);xCells.RemoveChild(xnRemove);}//投产期XmlNode xmlCellT = xCells.ChildNodes.Item(2);XmlElement xeColT = sourceDoc.CreateElement("ColSpa n");xeColT.InnerText = dCount;xeColT.InnerXml = dCount;xmlCellT.InnerXml += xeColT.OuterXml;XmlNode xmlCellValueT = xmlCellT.ChildNodes.Item(0).C hildNodes.Item(0).ChildNodes.Item(4);xmlCellValueT.InnerXml = "投产期";xmlCellValueT.InnerText = "投产期";for (int j = 0; j < int.Parse(dCount) - 1; j++){xnRemove = xCells.ChildNodes.Item(3);xCells.RemoveChild(xnRemove);}//生产期XmlNode xmlCellC = xCells.ChildNodes.Item(3);XmlElement xeColC = sourceDoc.CreateElement("ColSpa n");xeColC.InnerText = jCount.ToString();xeColC.InnerXml = jCount.ToString();xmlCellC.InnerXml += xeColC.OuterXml;XmlNode xmlCellValueC = xmlCellC.ChildNodes.Item(0). ChildNodes.Item(0).ChildNodes.Item(4);xmlCellValueC.InnerXml = "生产期";xmlCellValueC.InnerText = "生产期";for (int j = 0; j < int.Parse(jCount) - 1; j++){xnRemove = xCells.ChildNodes.Item(4);xCells.RemoveChild(xnRemove);}MemoryStream ms = new MemoryStream();XmlSerializer serializer = new XmlSerializer(typeof(XmlD ocument));serializer.Serialize(ms, sourceDoc);ms.Position = 0;return ms;}复制代码技巧可以先在报表里自己设计好需要的格式用XmlDocument sourceDoc = new XmlDocument();string path = AppDomain.CurrentDomain.BaseDirectory + " Orders.rdlc";然后用sourceDoc .save()保存生成xml可以看到此xml你需要改的格式是哪个地方。
RDLC报表系列(⼀)简单的动态数据绑定和配置RDLC系列链接最近新换了⼯作,终于从单纯的开发中脱离出来,换成主运维和偶尔开发了,但还没有转⾏。
本来打算找⼯作是想转⾏的,毕竟三线城市搞IT,以后真的不好说。
最近经理让给财务做⼀个报表展⽰系统。
由于之前⼀直都是做B2C的⽹站,流程和报表⽅⾯⼏乎没有涉猎。
只能从博客园和csdn上来查找资料,由于⼤部门⼈都是⽤的⽔晶报表,RDLC的资料挺少。
所以找了好久,也⾃⼰实验了好久,终于项⽬第⼀期做的项⽬差不多了,今天在家休息,就拿出点时间来整理⼀下。
这个项⽬分两期,第⼀期主要是数据表的展⽰,第⼆期会有矩阵,折线图和柱状图的使⽤。
所以,⽂章先把⾃⼰使⽤到的整理出来。
参考的⽂章链接如下: 下⾯就按照我的步骤先来个简单的栗⼦吧。
1.新建项⽬,这个⼤家都会了吧。
就不唠叨了,按照⾃⼰的习惯命名就好,我这⾥是demo1 2.然后是新建数据源,在⽹站或者项⽬上右击,添加—>新建项—>数据—>数据集,命名为demo1.xsd,点击确定 3.在数据源页⾯拖⼊DataTabel,按照下图设计表结构 4.新建报表,在⽹站或者项⽬上右击,添加—>新建项—>Reporting—>报表,命名为demo1.rdlc,点击确定 5.下⾯是重头戏,设计报表,在左侧的报表项中选择表,拖到右边的⽩⾊区域,会弹出如下对话框,输⼊名称选择数据源以及数据集,点击确认然后将需要显⽰的字段添加到表中即可。
6.新建⼀个页⾯,名称demo1.aspx,在页⾯设计中拖⼊ScriptManager和Reportview控件 7.然后开始写后台绑定数据的代码了,如下 demo.aspx.cs1using System;2using System.Collections.Generic;3using System.Linq;4using System.Web;5using System.Web.UI;6using System.Web.UI.WebControls;7using System.Data;8using System.Data.SqlClient;9using Microsoft.Reporting.WebForms;1011namespace rdlc112 {13public partial class demo11 : System.Web.UI.Page14 {15protected void Page_Load(object sender, EventArgs e)16 {17if (IsPostBack == false)18 {19 FillDataToReport();20 }21 }2223private void FillDataToReport()24 {2526// DataTable dt1 = GetDataTabel();2728//if (dt1.Rows.Count > 0)29//{3031//}3233 DataTable dt = new DataTable();34 dt.Columns.Add("Dept", typeof(string));35 dt.Columns.Add("CostCenter", typeof(string));36 dt.Columns.Add("SalePrice", typeof(decimal));37 dt.Rows.Add("IT", "810", 867);38 dt.Rows.Add("IT", "811", 877);39 dt.Rows.Add("E", "710", 867);40 dt.Rows.Add("E", "711", 877);41 dt.Rows.Add("L", "710", 867);42 dt.Rows.Add("L", "711", 877);434445 ReportViewer1.LocalReport.ReportPath = "demo1.rdlc";4647//显⽰报表48 ReportViewer1.LocalReport.DataSources.Clear();49 ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("dtDemo", dt));//要和设计报表时指定的名称⼀致,这⾥是dtDemo50 ReportViewer1.LocalReport.Refresh();515253 }5455 }56 }View Code 8.⼀切貌似都⼤功告成,F5运⾏,弹出如下报错。
使用RDLC报表(一)1 建立数据源启动VS2005新建一个窗体项目,命名为TestProj在左边的窗体内选择“添加新数据源”或在菜单上操作“添加新数据源”:选择后出现对话窗体,选择“数据库”,进入“下一步”:本数据源以SqlServer2000所提供的Northwind数据库为例,因此在数据库内选择驱动程序为SqlServer,具体操作视所用数据库而定(如果连接为Oracle,建议用Oracle所提供的ODP for .NET,地址:/technol ogy/global/cn/software/tech/windows/odpnet/index.html)。
选择数据源后,指定数据库文件,并进行测试,如果连接不通,请检查你的软件设置。
进行下一步,至显示出库文件内的表及视图,然后打开表,并选择其中的Employ ees,选择完成。
在数据源窗口中显示出所选择表及表内的字段,以备使用。
同时在资源管理器中,也可以看到新增加的数据文件。
2 报表浏览器在新建的窗体内,放入报表浏览控件:此报表浏览控件集成了报表查看及打印预览的功能,可直接输出至打印机,也可直接输出至Excel文件或PDF文件,对于喜欢看Excel表格的客户来说,这个报表控件非常不错。
关于此报表的来源及台前幕后的各种说法,请自己查询相关的网站。
3 建立报表文件选中报表浏览器控件后,在控件的右上角会出现一个小三角,点击后,出现一个菜单,选择“设计新报表”或在解决方案资源管理器中添加一个新的报表文件:双击“报表项”内的“表”,则设计空白表内生成一个表格,我们可以在表格内添加数据项。
此报表的设计方式类似于MS以前的VB下报表设计环境。
在报表设计器中,我将一份报表分为五个部分,从上至下为:报表标题区、列标题区、数据显示区、合计及页脚。
如果将报表的设计形式显示出页眉及页脚,报表的形式会看得更清楚些:选择页眉及页脚:显示结果:现在开始设计报表:在“页眉”区内放入一个文本框,将内容更改为“测试报表”,居中,字体放大加粗:从数据源窗口中选择合适的列,用鼠标拖到报表内的“详细信息”表格上,数据会自动填入:将设计的报表保存后,返回报表浏览窗口,并为报表浏览器选择我们设计的报表:选中报表文件后,菜单也有所改变:再为此报表文件指定数据源,选择数据源:确定,保存文件并运行测试文件。
4 预览报表生成后预览如下:是不是很简单?我们也可以对这个简单的报表进行美化,当然,我加上美化的一些功能后,可能效果更差,但此处只是为了演示用法。
Ø为数据加表格。
在报表设计器中,选择需要加表格框的区域然后在工具栏中选择边框工具加什么样的框线根据需要,此处我选择“所有框线”。
看上去比原来的灰线能稍黑一些,在预览时就能看出来了。
Ø加打印时间显示加入一个显示打印时间的文本框,在上面按右键,选属性:在“文件框属性”内,选择“值”后面的表达式生成:在表达式中选择时间:不要忘记表达式的前面一定要有一个“=”,如果没有,手工加上一个。
为了更符合我们的习惯,前面可以加个说明,如打印时间等,表达式的写法就要稍做改变:还是以“=”开头,后面加上“打印时间:”,再以“&”连接生成的Now函数即可得到我们想要的样子。
Ø为行加序号为了演示,我将序号列加在了表格了最后列加入一个新的列:在显示序号的列中输入相关的值:在此表达式的后面是Nothing,不是null,不要搞错。
三项功能已经完成,预览:比原来漂亮吗?至少实用了一些。
使用RDLC报表(二)--使用自定义数据集<!--[if !supportLists]-->1<!--[endif]-->新建窗体<!--[if !supportLists]-->2<!--[endif]-->建立数据源3<!--[endif]-->建立报表新的数据报表已经生成,下面开始对数据源进行设置。
<!--[if !supportLists]-->4<!--[endif]-->对报表自动生成的数据源进行设置选择工具栏à报表 à数据源,选中所要修改的数据源后,用“重命名”对其进行修改,如myds。
修改完成后,确定退出此窗口。
选中报表设计器内的表格,显示属性。
将表格的数据集名称更改为上面修改的名称。
如果一个报表文件内只有一个数据源,则表格内的数据值可直接写为“=Fields!字段.Value”的格式,如果包含多个数据源,则要对此字段的取值进行指定,如“=(Fi elds!字段.value,“数据集名称””。
<!--[if !supportLists]-->5<!--[endif]-->手动生成数据源手动生成的数据集内必须包含报表文件内设计的字段名称,否则会运行出现错误。
生成数据集:///<summary>///报表执行操作///</summary>///<param name="sender"></param>///<param name="e"></param>private void button1_Click(object sender, EventArgs e){//取得数据集string connstring = "Data Source=.;Initial Catalog=Northwind;Int egrated Security=True";System.Data.SqlClient.SqlConnection conn1 = new System.Data. SqlClient.SqlConnection(connstring);System.Data.SqlClient.SqlCommand command1 = new System.D ata.SqlClient.SqlCommand("select * from customers", conn1);System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data. SqlClient.SqlDataAdapter(command1);DataSet c_ds = new DataSet();try{conn1.Open();ada1.Fill(c_ds);}finally{conn1.Close();command1.Dispose();conn1.Dispose();}//为报表浏览器指定报表文件this.reportViewer1.LocalReport.ReportEmbeddedResource = "repo rt.Report1.rdlc";//指定数据集,数据集名称后为表,不是DataSet类型的数据集this.reportViewer1.LocalReport.DataSources.Clear();this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.R eporting.WinForms.ReportDataSource("myds", c_ds.Tables[0]));//显示报表this.reportViewer1.RefreshReport();}运行后的数据显示:posted on 2006-04-21 19:42 龙少爷阅读(1189) 评论(8)编辑收藏引用网摘所属分类: RDLC报表使用使用RDLC报表(三)--向RDLC报表传入参数在使用报表向客户展示结果数据时,实时的在报表中显示某些特定的数据是必需的,如:显示的部门、打印的日期等。
本文只简单的演示向报表内传入一个字符值。
如有其它问题,欢迎讨论。
1、新建一个工程TestReport,一个Form窗体,放入一个TextBox、一个Butt on按钮,再放入一个ReportViewer控件。
2、在ReportViewer上选择新建一个报表3、在打开的报表设计器中,选择工具栏的“报表”中的“报表参数”,新加一个参数,名称为content,数据类型为string,确定。
4、在报表设计器的页面上放入一个文本框,在文本框上按鼠标右键->属性,在“文本框属性”窗口中,选择“常规”选项卡内下部的“值”后面的“编辑表达式”按钮(就是那个Fx),在此窗口内,左下框内选择参数,在右下框将会出现在上一步中设置的参数,双击此参数,在上面的框内将出现所需要的表达式:=Parameters!conten t.Value。
保存此报表。
报表默认名称为Report1.rdlc。
5、在Form窗体内双击按钮,编写如下代码:this.reportViewer1.LocalReport.ReportEmbeddedResource = "Te stReport.Report1.rdlc";ReportParameter rp = new ReportParameter("content", this.text Box1.Text);this.reportViewer1.LocalReport.SetParameters(new ReportPara meter[] { rp });this.reportViewer1.RefreshReport();6、运行工程,在文本输入框内输入数据,按下按钮,数据是不是已经传入报表了?posted on 2007-03-06 14:41 龙少爷阅读(393) 评论(8)编辑收藏引用网摘所属分类: RDLC报表使用使用RDLC报表(四)--钻取式报表本文内以MSServer自带Northwind库文件内的Customers及Orders这两个表为例,建立两个报表文件,在查询得出Customers的表数据后,点击此表内的CustomerID数据,报表将转入至下一个报表,并显示与之相关的Orders的数据,即VS中所谓的钻取式报表。
1、打开一个工程,并新建一个From,放入一个Button及一个ReportViewer 控件。
2、在工程内新建一个数据源,连接到Northwind库文件,显示Customers及Orders这两个表3、新建一个报表文件,并以表格的形式来显示数据,将Customers表内的Cust omerID、CompanyName及Address三个字段放入,形成一份有表头及数据的简单报表,并将此报表保存命名为customerReport4、再建一个报表文件,与customerReport相同,也以表格的形式来显示报表,将Orders内的OrderID、CustomerID、ShipName及OrderDate四个字段放入表格内,报表保存为orderReport5、orderReport的数据源根据主报表customerReport的数据来确定数据源的数据,查看表格的数据集名称,我的显示为NorthwindDataSet_Orders,也可以自己另建一个,具体方法见我的《RDLC报表(二)》6、再打开customerReport报表,将CustomerID设置成为可点击的索引字段,以便转入下一个报表。