动态创建rdlc报表,绑定任意Dataset
RDLC报表---自定义数据集
//查询并填充 try {
connection.Open(); adapter.Fill(ds); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { connection.Close(); command.Dispose(); connection.Dispose(); }
//新建数据源 ReportDataSource rs = new ReportDataSource(); = "EventHistory";//"EventHistory"是rdlc报表Tablib属性下的数据集名称 rs.Value = ds.Tables[0];
//添加数据源 this.reportViewer1.LocalReport.DataSources.Add(rs);
//新建连接 SqlConnection connection = new SqlConnection(connstr);
//查询命令 SqlCommand command = new SqlCommand(textBoxSQL.Text, connection);
//适配器 SqlDataAdapter adapter = new SqlDataAdapter(command);
//指定rdlc报表 this.reportViewer1.LocalReport.ReportEmbeddedResource = "FormReport.EventReport.rdlc";
//清空reportviewer先前的数据源 this.reportViewer1.LocalReport.DataSources.Clear();
关于Report.rdlc的使用
最近在数据展示上用到报表,很多情况下我们都是动态生成数据,再将数据绑定到报表上。
下面是我的个人总结:1.首先我使用的是普通的报表,而不是水晶报表。
既使用的是rdlc类型的报表。
2.要将报表展示出来当然就离不开ReportViewer.在开发中经常会多个rdlc共用一个窗体中的ReportViewer来将数据展示。
而不同的rdlc的数据及字段都是各不相同的。
由于是动态生成的。
我们无法直接从数据库表中找到对应的表,因而在设计rdlc的时候我们通常采用两种方式。
一是在数据库中建立一个临时表,表所对应的字段就是我们的动态生成的数据中将包含的字段,注意这时表的字段一定要与动态生成的数据中的字段一至,否则在编译的时候就会出错。
二是直接通过添加数据集来实现,在项目解决方案中添加新项:数据集(DataSet),再给数据集添加表,给表添加列,这时候也要保证列名与动态生成的数据的列名字段一至,采用这种方式我们可以将所有报表中将要动态生成的数据中的字段都添加过来。
这样只需一个数据集一个表就可以实现,从而不必要在数据库中创建临时表。
虽然数据库中的临时表我们会删除。
有了数据源我们在设计报表的时候就可以直接从数据源中将想要的列直接拉到报表设计器中既可。
这样动态生成的数据对应的字段值将绑定到此处。
这时候我们会看到类似Fields! 字段1.Value的表达式。
当然我们也可以在此基础上对报表进行更进一步的处理。
比方设置表头表尾,并给出一些求和的值。
3.报表设计好了,下一步就是给ReportViewer绑定这张报表了。
由于我的ReportView在每次用于选择不同的分类时绑定不同的rdlc,因而我们可以在代码中将要绑定的报表通过参数传入,再过rptViewer.LocalReport.ReportEmbeddedResource = "";或rptViewer.LocalReport.ReportPath="" 为ReportViewer提供报表数据。
asp winform 动态加载rdlc报表数据源
RDLC使用手册1、为什么要使用RDLC报表为什么要使用RDLC报表,蜡人张在其博文“RDLC报表(一)”中已经很好的阐述了这一点。
(源码网整理:)VS .NET开发中,用什么进行报表设计?可能的回答是Crystal Report,当然,必须承认Crystal Report的功能还是非常强大的,被Business Object收购以后,商业的成分也在逐渐增加,也形成了一定规模的用户群。
Visual Studio .NET进入2005版本以后,Crystal Report与IDE的结合更“紧密”了,至少我们看不到那个讨厌的注册窗口了。
但是,Microsoft似乎并不容忍在自己的超级工具中竟然没有报表工具,于是Report Viewer Control出现了,我把它的报表称为RDLC报表。
在VS .NET 2005之前,SQL Server Reporting Services中已经提供了一种被称为报表定义语言(Report Definition Language, RDL)的语言;在VS .NET 2005中,Microsoft提供了针对这种报表的设计器,并提供了在WinForm和WebForm中使用这种报表的能力。
Microsoft 将这种报表的后缀定为RDLC,RDL仍然是Report Definition Language的缩写,那么C代表什么呢?C代表Client-side processing,凸显了它的客户端处理能力。
这种报表的易用性和可定制性让我们完全有理由放弃Crystal Report,让我们来看看它的强大功能吧:1)简单易用的控件,特别是Table控件,非常方便字段在报表上的排列;2)灵活的可定制性,用XML来描述一个报表相关的一切,不用说了吧;3)高度可编程性,在你的项目中,甚至不需要有一个报表文件,通过代码就可以实现报表生成、预览和打印等一系列操作;4)支持DrillThrough数据钻取功能;5)导出的Excel文件格式非常完美,而且并不需要安装Excel;6)数据源处理极其方便,开发人员可以自己接管数据库连接、取数,然后将数据结果赋值给RDLC的数据集即可。
。NET中动态控制RDLC报表
中动态控制 RDLC 报表在 程序中,可以选择使用水晶报表,功能确实强大。
但是 web 版的水晶报表好似存在的问题。
如果所作报表不是复杂的一塌糊涂的话,可以使用微软自带的Rdlc 报表。
Rdlc 优点:1:Rdlc 报表设计简单2:结果存成xml,易于控制3:导出格式作的很不错这里所说的动态控制报表所指的是:在一些时候,制作了报表之后希望在运行中可以动态的做一些小修改,比方说列的位置,用户控制显示那些列等等。
控制方法,尝试了这么几种:1:控制微软提供的报表对象的属性;2:报表全部自动生成3:修改报表源文件,然后加载。
控制微软提供的报表对象的属性:基于这个功能需求,一开始我想到的方法是通过控制微软提供的这些报表对象的属性来实现。
因为这种方法最人道了。
但是事与愿违,微软的ReportViewer对象是用来显示Report 的,自然不行;我使用的report 是自己设计的, localReport,找到Report 对象,里面方法有这个几个:report.GetDefaultPageSettings();report.GetDocumentMap()等,第一个是获取打印纸X德设置,第二个是获取doc 文档〔但是始终出错〕,都是只读属性;所以,第一种尝试失败。
第二种方法就是报表全部自动生成。
可以找到一个完整的例子,在这里:://gotreportviewer/DynamicTable.zip这个例子里面,他把xml结构的rdlc报表写成一个类ReportDefinition,然后通过自定义这个类的内容来得到一个报表。
其实际还是为了自己构造一个报表对象的xml。
这是加载自定义报表的过程: win 下的代码 this.reportViewer1.Reset();this.reportViewer1.LocalReport.LoadReportDefinition(m_rdl);this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("MyData", m_dataSet.Tables[0]));this.reportViewer1.RefreshReport();这是自动生成xml 的代码:privateMemoryStream GenerateRdl(List<string>allFields, List<string>selectedFields){MemoryStream ms = new MemoryStream();RdlGenerator gen = new RdlGenerator();gen.AllFields = allFields;gen.SelectedFields = selectedFields;gen.WriteXml(ms);ms.Position = 0;return ms;}这是完全 ReportDefinition的一局部定义:namespace Rdl {using System.Xml.Serialization;/**////< remarks/ >[System.CodeDompiler.GeneratedCodeAttribute("xsd","2.0.50727.42")][System.SerializableAttribute()][System.Diagnostics.DebuggerStepThroughAttribute()][SystemponentModel.DesignerCategoryAttribute("code")][System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)][System.Xml.Serialization.XmlRootAttribute(Namespace=_"://schemas.microsoft/sqlserver/reporting/2005/01/reportdefinition", IsNullable=false)]public partial class Report {private object[] itemsField;但是几经考虑之后,这个方案也不让人满意,原因是:所有的报表对象都得自己生成,一下子回到了解放前,没有可视化工具的设计既繁琐又复杂。
RDLC报表总结
RDLC报表一、RDLC介绍在VS2005之前,SQL Server Reporting Services中已经提供了一种被称为报表定义语言(Report Definition Language, RDL)的语言;在VS2005中,Microsoft提供了针对这种报表的设计器,并提供了在WinForm和WebForm中使用这种报表的能力。
RDL是Report Definition Language的缩写,C代表Client-side processing,凸显了它的客户端处理能力。
从SQL Server2005开始,微软提供了一个报表服务,即Reporting Service,利用该服务部署在服务器端的报表扩展名为rdl;而通过自主生成一些数据源,在本地展现出来的报表扩展名为rdlc,这种方式称之为Local Report。
二、如何开发下面是LocalReport的开发步骤,对于ServerReport还没有进行研究。
1.新建一个Web工程,新建一个aspx页面。
2.将ReportViewer控件添加到新建的aspx页面中。
(视图—工具箱—数据—ReportViewer)VS2005的数据控件中有名为ReportViewer的控件,用于展现报表。
该控件即可以展现rdl 报表也可以展现rdlc报表。
3.新建报表文件选中web工程—右键添加—新建项—选中报表(如下图)4.创建自己的报表布局(以柱状图为例)工具箱—图表—拖放到报表文件主体中选中图表—右键—图表类型—柱形图—简单柱形图可以直接修改属性调整布局,也可以利用工具栏中的布局按钮布局(包括水平居中、垂直居中、对齐网格等)5.创建数据集(选中web工程—右键添加—新建项—选中数据集)在新建的数据集面板右键—添加—TableAdapter配好数据库连接之后,下一步,有三种选择方式:使用sql语句、新建存储过程、使用现有存储过程。
根据需求选择一种配好自己的数据源。
Vs2010中rdlc报表绑定DataTable数据源
18 }
19 }
20
21 public void FillDataToReport()
22 {
23
24 DataTable dt = new DataTable(); //创建一个datatable
25 dt.Columns.Add("studentID", typeof(int));
这时就弹出一个选择数据源的对话框,如下图所示,自己选择要添加的数据源并命名: 将对应的datatable项添加到表中,如下图所示:
创建一个aspx页面,拖动reportviewer控件到页面上面,并拖动scriptmanager控件,接下来是简单的代码编写过程:
1 using System;
2 using System.Collections.Generic;
30 dt.Rows.Add(3, "小神仙", "003");
31
32 this.ReportViewer1.LocalReport.ReportPath = "student.rdlc"; //查找要绑定的报表
33 this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("T_Student", dt)); //绑定数据源
9
10 public partial class _Default : System.Web.UI.Page
11 {
12 //页面加载的时候绑定数据源
13 protected void Page_Load(object sender, EventArgs e)
RDLC报表实例
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入门操作
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.运行界面如下:
三.子报表。
visual studio 做报表开发的步骤
在Visual Studio中进行报表开发的步骤大致如下:
1. 确认Visual Studio版本中包含Reportview控件。
2. 在项目上右键添加-新建项,选择Reporting中的报表。
同样右键添加-新建项,选择数据中的数据集。
3. 在新建的数据集中右键添加-DataTable。
通过添加列和修改表名建立一个和数据库中表项相同的DataTable。
4. 打开刚创建的报表(如Report1.rdlc),在弹出的界面中选择刚创建的数据源和数据集。
在报表设计界面,可以添加需要的列和其他元素。
5. 打开Form设计,拖入一个Reportview控件,选择刚配置好的报表,然后点击选择数据源。
此时会自动生成一个dataSetBindingSource,在其属性窗口DataMember中写入数据集的名称。
6. 双击窗体建立Load事件,编写用于加载和处理报表的代码。
例如,可以从数据库中提取数据并填充到数据集中,然后将数据集绑定到报表上。
7. 编译并运行程序,查看报表效果。
以上步骤是一个基本的报表开发流程,实际开发中可能需要根据具体需求进行调整和扩展。
同时,也需要注意Visual Studio版本和控件的兼容性,以及数据库连接和数据处理的安全性等问题。
Winfrom的ReportViewer报表控件和.rdlc后缀的报表绑定应用
Winfrom的ReportViewer报表控件和.rdlc后缀的报表绑定应⽤1.创建⼀个winfrom项⽬,从⼯具箱添加ReportViewer控件,命名ReportViewer12.在项⽬中添加⼀个报表,命名Report1.rdlc3.打开刚刚添加的报表,画出模板4.添加⼀个数据集,⽤于报表绑定,命名DataSet15.在数据集中添加⼀个DataTable,命名DataTable1,有3列C1,C2,C36.在报表Report1.rdlc中添加数据集,命名DTTEST7.在报表中绑定数据 数据类型有⽂本,图⽚等等,本例就讲解这两种如何绑定。
1).⽂本:3种⽅式绑定。
A.在⽂本属性-值-输⼊栏中直接输⼊[C2] B.在⽂本属性-值-fx,输⼊=Fields!C2.Value c..在⽂本属性-值-fx-数据集-DTTEST-First(C2) 2).图⽚ a.静态图⽚:图⽚属性,图像源选择嵌⼊,然后点击导⼊。
2).动态图⽚:例如⼆维码、条形码,原理:把图⽚转成byte[],byte[]再转成base64数字编码的等效字符串。
A.图⽚属性,图像源选择数据库,选择对应MIME类型image/jpeg,字段点击fx,输⼊=System.Convert.FromBase64String(Fields!C1.Value)8.详细代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using Microsoft.Reporting.WinForms;using System.IO;using System.Drawing.Imaging;namespace WindowsFormsApplication1{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){DataTable dt = new DataTable();dt.Columns.Add("C1", typeof(string));//列名必须与数据集的列名⼀致dt.Columns.Add("C2", typeof(string));//列名必须与数据集的列名⼀致dt.Columns.Add("C3", typeof(string));//列名必须与数据集的列名⼀致//动态图⽚绑定string c = Convert.ToBase64String(ImageToBytes("F:\\wenbin\\⼯作⽂件\\SF\\LOGO\\顺丰logo简体.jpg"));dt.Rows.Add(c, "陈先⽣收", "深圳市");//控件绑定报表reportViewer1.LocalReport.ReportPath = @"F:\test\QueueTest\WindowsFormsApplication1\Report1.rdlc";//报表绑定数据集reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DTTEST", dt));this.reportViewer1.RefreshReport();}///<summary>///将图⽚转成byte[]///</summary>///<param name="path">图⽚路径</param>///<returns></returns>public byte[] ImageToBytes(string path){Image image = Image.FromFile(path);//ImageFormat format = image.RawFormat;using (MemoryStream ms = new MemoryStream()) {image.Save(ms, image.RawFormat);byte[] buffer = new byte[ms.Length];//ms.Position = 0;//ms.Seek(0, SeekOrigin.Begin); //ms.Read(buffer, 0, buffer.Length);buffer = ms.ToArray();return buffer;}}///<summary>///将byte[]转成图⽚///</summary>///<param name="buffer">byte[]</param>///<returns></returns>public Image BytesToImage(byte[] buffer){MemoryStream ms = new MemoryStream(buffer);Image image = Image.FromStream(ms);return image;}}}。
报表设计器RDL报表操作指南
文本框 文本框用于显示报表数据,Table 和 Matrix 单元格中默认显示的是文本框控件,当您从报 表资源管理器中将数据字段拖拽到报表界面时,生成的也是文本框控件。您可以通过表达式来 修改数据的显示行为。
1.5 属性窗口
在设计报表时,属性窗口是非常重要的工具。可以选择任何数据区域、控件或报表本身并 在属性窗口中查看其属性。默认情况下,此窗口位于报表设计区域的右侧。您可以通过单击属 性窗口顶部的“按字母顺序”或“按类别顺序”显示属性列表。
定您是否可以选择设计界面中的控件,或移动放大报表的可见区域。 4. 缩放栏
缩放栏提供了一个滑块,拖动它可以缩放设计界面,或者您可以在滑块任一端使用放 大和缩小按钮。
1.3 RDL 报表菜单
菜单项 保存报表 加载报表
数据源 设置
说明 将打开另存为对话框,以 RDLX 文件格式保存新创建的报表。 在打开文件对话框中,您可以选择任意的 RPX 文件,并在设计 器中打开。请注意对当前报表的任何更改都将丢失,布局的文件 将替换当前设计器中中报表。 将打开报表数据源对话框,将数据源绑定到该报表。 将打开报表设置对话框。
报表设计器 RDL 报表操作指南
葡萄城报表提供了一个高度集成的设计器,并以可视化、代码、脚本或表达式的方式来编 辑报表。它包括一个属性窗口,可以在该窗口中设置每个元素的属性。
设计器支持三种类型的报表:RDL报表、页面报表、区域报表。给我们提供了最大限度的报表交互能力。可以放大和缩小控件,设置交互式排序, 设置钻取报表,还可以添加指向其它报表的钻取链接和指向报表内其它区域的书签链接。下面 详细介绍RDL报表。
列表 列表中可以放置其他报表控件。它会根据数据集中的数据重复地显示区域内的控件。 距表 距表支持动态数量的行和列。此功能与交叉表和数据透视表类似。 形状 形状不与具体的数据关联。可用于显示一个控件的边界,或者高亮显示报表中特定区域的 数据,支持的形状有矩形,圆角矩形和椭圆。与Container不同的是,该控件内不能放置其他 控件。 迷你图 迷你图以一个很小的图像来展示数据的趋势,支持折线、面积、堆积条形、柱状和须状图 表类型。 子报表 子报表以子报表的形式显示其他报表的内容。可以从主报表中将参数传递给子报表以实现 数据过滤。需要注意的是每个子报表都以单独的报表运行,当处理大数据报表时,这种方案可 能会影响到运行的速度,这种情况下,数据区域是更为合理的选择。 表格 表格以行为单位进行数据显示。默认情况下,表格有三行、三列。表格列的设置是在设计 时完成,行会根据数据集中的数据进行重复显示。表格默认会显示表头、明细和表尾,表头和 表尾和删除,此外您还可以添加/删除分组头和分组尾,表格的单元格默认包含一个文本框控 件,不过您可以将文本框控件替换为其他任意类型的报表控件。 文档目录 用于制作报表目录。 地图 用于制作地图报表。
动态数据源与报表系统绑定的4个步骤
动态数据源/集与报表系统绑定的4个步骤实际项目中,存在一种设计报表时无法明确知道从哪个数据库中取数的情况。
例如,根据查看报表的用户身份不同,所要取数的数据库也不同。
在这种场景中,就需要用到动态数据源。
所谓动态数据源,就是连接字串为表达式形式的数据源。
通过在表达式中使用报表参数,实现不同用户访问不同数据库的效果。
所谓动态数据集,就是SQL语句为表达式形式的数据集。
通过在表达式中使用报表参数,实现不同用户访问不同数据库表或视图的效果。
创建一个动态数据源的思路如下:(1)先设计好静态的数据源连接字串和数据集。
这是为了获得数据集的字段列表,以便设置表格、图表等报表元素的数据字段绑定。
(2)添加报表参数。
(3)修改数据源,将连接字串设置为表达式,表达式中引用报表参数,从而实现具体数据源随参数不同而变化的“动态”效果。
下面举例说明具体的设计方法。
4.1 设计静态的数据源启动报表设计器,新建一个RDL类型的报表。
添加一个SQL Server数据源,连接字串如下:data source=(local);password=123;initial catalog=ArsDemo;user id=user1;如下图:添加一个数据集,SQL语句如下:select * from 产品字段列表如下:拖放一个表格到设计区,绑定数据集的字段,如下图:预览效果如下图:到目前为止,一个静态数据源的报表就设计完成了。
4.2 添加报表参数添加报表参数是为实现动态数据源做准备。
添加报表参数的步骤如下:(1)右键单击报表资源管理器的【参数】节点,再点击【添加参数】,如下图:(2)设置参数名称等信息,如下图:(3)点击【确定】按钮。
此时会看到报表资源管理器的【参数】节点下面多了一个DbName参数,如下图:4.3 修改数据源设置定义好报表参数之后,就可以重新设置数据源,使之变成动态数据源了。
方法如下:(1)右键单击数据源,再单击【修改】,如下图:(2)在数据源设置对话框中,切换到【连接字符串】选项卡,再单击代表表达式的fx图标,如下图:(3)在表达式编辑器窗口中,将原来的连接字串改为表达式。
csdn rdlc报表使用手册
csdn rdlc报表使用手册RDLC(Report Definition Language Client)是微软提供的一种报表定义语言,用于创建和部署本地报表。
RDLC报表使用基于XML的RDLC文件格式,可以在客户端应用程序中使用,不需要依赖于服务器端的报表服务。
RDLC报表使用手册一、RDLC报表的基本概念1.报表设计器:RDLC报表的设计工具,可以在Visual Studio中打开和编辑。
2.数据集:报表所需的数据源。
可以是数据表、数据集以及通过查询语句获取的数据。
3.数据源:报表绑定的数据源对象。
4.数据绑定:将报表中的控件与数据源中的字段进行关联。
5.表格:报表中用于显示数据的主要控件,可以设置列、行、组和总计等。
6.图表:报表中用于可视化数据的控件,可以用于展示柱状图、折线图、饼图等。
7.矩阵:报表中用于显示交叉表格的控件,可以实现多维数据的展示。
8.列表:报表中用于显示动态数据的控件,可以根据数据集的行数重复显示。
二、RDLC报表的创建和设计步骤1.打开Visual Studio,并创建一个新的Windows Forms项目。
2.在项目中添加RDLC报表文件,可以右键项目,选择添加->新建项,在模板中选择RDLC文件。
3.在报表设计器中,可以添加数据源和数据集。
选择数据源对象,并设置查询语句或连接字符串。
4.在报表设计器中,通过拖拽控件的方式添加表格、图表、矩阵或列表等控件。
5.设置控件的属性和样式,如字体、颜色、边框等。
6.设置数据绑定,将报表中的控件与数据源中的字段关联起来。
7.设置表格、图表、矩阵或列表等的相关属性,如分组、排序、总计等。
8.预览或发布报表,可以在报表设计器中预览报表效果,也可以在应用程序中调用报表进行展示。
三、RDLC报表的数据绑定和常用控件1.数据绑定:可以通过设置控件的Data Source属性,选择报表的数据集。
然后通过设置控件的Value属性,将控件与数据集中的字段进行绑定。
Vs2008动态调用rdlc报表
Vs2008调用rdlc报表在web方式调用rdlc报表方法之一如下:一、项目中添加一报表,如Report1.rdlc,设置好其界面样式。
二、建立一WEB页面,添加SqlDataSource数据控件SqlDataSource1,设置其:ConnectionString属性ProviderName="System.Data.SqlClient"及SelectQuery(SelectCommand)属性或SqlDataAdapter属性可以写代码如下:SqlDataSource1.ConnectionString =ConfigurationManager.ConnectionStrings["hnmkbzhConnectionString"].ConnectionString; SqlDataSource1.SelectCommand = "select * from mkqylsgx where mkID>600";三、WEB页面,添加MicrosoftReportViewer报表控件,如ReportViewer1,设置其:LocalReport下的ReportPath属性及DataSources下的DataSourceId、Name等属性。
<LocalReport ReportPath="Report1.rdlc"><DataSources><rsweb:ReportDataSource DataSourceId="SqlDataSource1" Name="aaaa" /> </DataSources></LocalReport>报表Report1.rdlc的xml源文件就会发现DataSets的定义:<DataSets><DataSet Name="aaaa">可以写代码如下:ReportViewer1.Reset();this.ReportViewer1.LocalReport.ReportPath = "Report1.rdlc";ReportViewer1.LocalReport.DataSources.Clear();ReportDataSource reportDataSource1= new ReportDataSource();reportDataSource1.DataSourceId="SqlDataSource1";// aaaa数据源名字必须和报表Report1.rdlc绑定的数据源DataSet名相同 = "aaaa";this.ReportViewer1.LocalReport.DataSources.Add(reportDataSource1);this.ReportViewer1.LocalReport.Refresh();四、已经调试通过,运行即可。
微软rdlc报表
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报表(原创)
动态生成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报表系列(⼀)简单的动态数据绑定和配置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报表速成指南
RDLC报表速成指南RDLC报表是微软⾃家的报表,已经集成在vs2010中,相对⽔晶报表更轻量级,更重要的是:可直接在web项⽬中使⽤。
使⽤步骤:⼀、创建DataSet右击->Add New Item-> DataSet(本例中命名为DS_EMP),会出现以下界⾯:然后右击->Add->DataTable,添加⼀个表,命名为T_EMP,然后添加⼆个列EMPNO,EMPNAME均为String型,完成后的样⼦类似下现这样:注:如果机器上安装了BizTalk,DataSet打开后,可能是下⾯这样这种编辑⽅式我个⼈觉得不⽅便,可以通过在DS_EMP.xsd上右击-->Open With,然后在弹出界⾯中,把DataSet Editor设置成默认编辑器。
⼆、创建RDLC报表项⽬右击->Add New Item -> Report,添加报表,命名为Report_EMP.rdlc,这时会出现报表编辑界⾯,从⼯具箱中拖⼀个Table到报表空⽩区这时会弹出⼀个选择DataSet的界⾯:选择DS_EMP,然后点击"OK"关闭,这时报表布局上会出现⼀个⽹格注:通常这个界⾯在绝⼤多数情况下,Data Source下拉框⾥并不能识别出当前项⽬中的数据集。
这时,需要在解决⽅案rdlc⽂件上右击-->Open With-->XML(Text) Editor,直接编辑rdlc⽂件(报表rdlc⽂件其实就是⼀个xml),然后将以下内容插⼊到<Body>节点前<DataSources><DataSource Name="DS_EMP"><ConnectionProperties><DataProvider>System.Data.DataSet</DataProvider><ConnectString>/* Local Connection */</ConnectString></ConnectionProperties><rd:DataSourceID>d01eef15-1518-4df0-a45a-a17d24570e3a</rd:DataSourceID></DataSource></DataSources><DataSets><DataSet Name="T_EMP"><Fields><Field Name="EMPNO"><DataField>EMPNO</DataField><rd:TypeName>System.String</rd:TypeName></Field><Field Name="EMPNAME"><DataField>EMPNAME</DataField><rd:TypeName>System.String</rd:TypeName></Field></Fields><Query><DataSourceName>DS_EMP</DataSourceName><CommandText>/* Local Query */</CommandText></Query><rd:DataSetInfo><rd:DataSetName>DS_EMP</rd:DataSetName><rd:SchemaPath>App_Code\DS_EMP.xsd</rd:SchemaPath><rd:TableName>T_EMP</rd:TableName><rd:TableAdapterFillMethod /><rd:TableAdapterGetDataMethod /><rd:TableAdapterName /></rd:DataSetInfo></DataSet></DataSets>注:<rd:SchemaPath>App_Code\DS_EMP.xsd</rd:SchemaPath> 这个节点中的SchemePath最好设置成相对路径,否则多⼈团队开发时,如果其它⼈跟你本机的物理路径不⼀致,DataSet定义有变化后(⽐如新增加了字段),在报表设计的Report Data⾯板中,⽆法通过右键->Refresh刷新DataSet.然后再以正常⽅式双击rdlc报表打开即可看到左侧Report Data⾯板中多了⼀个数据集 ⿏标定位到单元格上,注意右上⾓有⼀个⼩图标(如上图),点击这个图标,能列出数据集中的字段 将需要打印的列依次添加进来再稍做些修饰,⼀个简单的报表设计就算完成了三、将报表嵌⼊到⽹页中创建⼀个aspx页,拖放⼀个ReportViewer到页⾯上,然后再拖放⼀个ScriptManager到页⾯上,最终的代码如下:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title></title></head><body><form id="form1" runat="server"><div><rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="100%" Height="100%"></rsweb:ReportViewer><asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager></div></form></body></html> 同时web.config中也会发⽣⼀些变化:<?xml version="1.0"?><!--For more information on how to configure your application, please visit/fwlink/?LinkId=169433--><configuration><system.web><httpHandlers><add verb="*" path="Reserved.ReportViewerWebControl.axd" type = "Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </httpHandlers><compilation debug="true" targetFramework="4.0"><assemblies><add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/><add assembly="mon, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/><add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/><add assembly="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation><pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/></system.web></configuration> 主要是system.web/httphandlers 以及 assemblies节点下多了⼀些内容最后在default.aspx.cs⾥⽤代码弄点数据出来using System;using System.Data;using Microsoft.Reporting.WebForms;public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){FillDataToReport();}}void FillDataToReport(){//造⼀些⽰例数据DataTable dt = new DataTable();dt.Columns.Add("EMPNO", typeof(string));dt.Columns.Add("EMPNAME", typeof(string));dt.Rows.Add("000", "菩提树下的杨过");dt.Rows.Add("001", "张三");dt.Rows.Add("002", "李四");dt.Rows.Add("003", "王五");//指定加载哪个报表,并填充数据this.ReportViewer1.LocalReport.ReportPath = "Report_EMP.rdlc";this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("T_EMP", dt)); }} 浏览⼀下页⾯,就能看到在线报表了:。
微软RDLC报表动态图片(二维码)
微软RDLC报表,动态加载图片文件(二维码)我是一个程序员,有时候莫名其妙的遇到一些不好解决的问题,于是我就记录了下来,希望对大家有用!开发环境:VS2010(中文),IIS7.0,IE8及以上1、首先讲一下,我的动态的图片是一个二维码。
(1)引用一下ThoughtWorks.QRCode.dll这个DLL,如果没有的话去网上下载一个。
或ThoughtWorks.QRCode.rar者我这个word文档里面是有一个的(2)然后呢,当然要有一个存放二维码的文件夹,用来存放生成之后的二维码,这个名字随便起(3)最后,当然是报表后台的代码了,不过RDLC报表是动态生成的,要写在aspx.cs 里面,写的这么清楚了,大家不会不明白吧:private void create_two(string nr)//nr 这个参数当然是需要生成二维码的文字或字段{Bitmap bt;string enCodeString = nr;QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);string filename = nr;bt.Save(Server.MapPath("~/QRImage/") + filename + ".jpg");}(4)当然如果报错了,报红线了,那当然要去解析一下,system.drawing神马的,去引用一下吧,当然你加进来的ThoughtWorks也要去引用一下。
(例如using houghtWorks.QRCode.Codec;)2、当然是要把生成的这个二维码放到恶心的RDLC报表上,这里讲解的是VS2010,如果环境不对,请绕路。
(1)我觉得注解的够清楚了。
(2)(3)后台代码绑定protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){string sid = Request.QueryString["id"];ReportViewer1.ProcessingMode = ProcessingMode.Local;ReportViewer1.LocalReport.ReportPath =erver.MapPath("~/Report/Report/SDBXZ.rdlc");ReportViewer1.LocalReport.EnableExternalImages = true;StringBuilder sb = new StringBuilder();sb.Append("select * from SDBXZ_View where JGJSID='" + sid + "'");string con =System.Configuration.ConfigurationManager.ConnectionStrings["CostManagementSystem"].ToString();DataSet ds = new DataSet();SqlConnection sqlcon = new SqlConnection(con);SqlCommand sqlcom = new SqlCommand(sb.ToString(), sqlcon);SqlDataAdapter sqlad = new SqlDataAdapter();sqlad.SelectCommand = sqlcom;sqlad.Fill(ds, "sql");///取得一个字段,我取得是GUIDstring guid =ds.Tables["sql"].Rows[0]["JGJSID"].ToString().Replace("-","").Trim();///生成二维码,并保存到指定目录,在最上面这个方法已经写在那里了create_two(guid);///拼接一个URL(存放图片的URL)string url = "file:///" + Server.MapPath("~/QRImage/") + guid + ".jpg";LocalReport report = ReportViewer1.LocalReport;///把URL付给参数EWM(图片绑定的参数)report.SetParameters(new ReportParameter("EWM", url)); ReportViewer1.LocalReport.DataSources.Add(newReportDataSource("DataSet1", ds.Tables["sql"]));ReportViewer1.DataBind();this.ReportViewer1.ServerReport.Refresh();}}3、测试下吧,大功告成!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
需求是这样的:我有一个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试了一下
效果还是不错的。