RDLC 报表系列(一) 创建一个报表

一.写作前题

  前一段时间写了一遍关于RDLC开发的示例文章,[原创] 在VS 2005 和 VS 2008 中使用RDLC使用免费报表,得到了群里很多兄弟的支持,这遍文章从大体上讲述了怎样用RDLC做报表开发,没有给出具体的开发步骤,因此我决定来写一个系列关于RDLC报表开发的文章,希望对你有所帮助。

  这个系列文章主要从实例的方式来说明怎么用Visual Studio 2008(2005也一样提供这个功能)做RDLC报表的开发,最后再对此系列做总结,讲述一些概念的东西。

  作为开遍,我不想过多的讲于概念,主要来说明怎样来实现一个简单的RDLC报表。

  二.本文内容  

  1.创建一个简单RDLC项目

  2.总结

  3.代码下载(下载)

  三.创建一个简单RDLC项目

  1. 打开Visual Studio 2008,新建一个ASP.NET Web Application项目,如下图所示。

RDLC 报表系列(一) 创建一个报表

  图片看不清楚?请点击这里查看原图(大图)。

  2. 在项目中新建两个文件夹,分别叫DataEntity和ReprotTemplate,如下图, 至于这两个文件夹主要用来存放什么,在下面我们会讲到,这里先不说。

RDLC 报表系列(一) 创建一个报表

3. 此项目需要引用Microsoft.Reporting.WinForms和System.Windows.Forms,所以我们需要右击上图中的References,然后在.NET Tab中找到我们所需要引用的Reference,点击Ok,添加到我们的引用中去。

RDLC 报表系列(一) 创建一个报表

  4. 右击我们新建的DataEntity文件夹,选择Addà New Item…,选择左边的Categories中的Data,然后选择右边的DataSet,输入你的DataSet 名字,然后点击Add到这个文件夹下,至此我们知道DataEntity文件夹用来存放数据集。

RDLC 报表系列(一) 创建一个报表

  图片看不清楚?请点击这里查看原图(大图)。

  5. 点击Visual Studio IDE左边的Server Explorer(如果左边没有,可以在View菜单中找到),然后选择一个Database中的表,选择拖到DataSet中(如果还没有IDE中还没有Database影射,那么可以选择Toolsà Connect To Database…来连接到你需要的Database),当然这个DataSet中的表也可以自己定义(在编辑区点击右键,选择新增表,然后在表中增加你需要的字段)。

RDLC 报表系列(一) 创建一个报表

RDLC 报表系列(一) 创建一个报表

6. 右击我们新建的ReprotTemplate文件夹,选择Addà New Item…,选择左边的Categories中的Reporting,然后选择右边的Report,输入你需要的名字,点击Add,就样我们就把一个Report的模板加入到ReprotTemplate文件夹中了,Report模板的编辑区如下面第二张图所示。

RDLC 报表系列(一) 创建一个报表

RDLC 报表系列(一) 创建一个报表

  图片看不清楚?请点击这里查看原图(大图)。

  7. 下面我们要做的事情就是编辑这个报表模板,首先我们选择这个报表所需要的数据集,点击Report菜单下面的Data Source…,在弹出的Report Data Source中,选择我们添加在DataEntity中那个DataSet的表,如下图所示。这里也就说明了,DataEntity中存放的是RDLC模板中所需要的数据集,为RDLC提供数据服务(除了DataSet以外,还有很多数据集,我们以后的内容中会讲解这此)。

RDLC 报表系列(一) 创建一个报表

RDLC 报表系列(一) 创建一个报表

  8. 然后我们在Visual Studio IDE的左边的ToolBox中拖一个Table到我们的报表编辑区中,这个Table默认有三行三列,第一行是标题行,第二行是数据绑定行,第三行是表的页脚行(如果你不想显示其中的一部分你可以选中一行,然后右击这一行的最左边,取消或者选中即可)。如下图所示,我们在标题行对应的字段中输入标题名,你也可以右击到某一列,选择新增一列在选择列的左边或者右边。

  接下来要做的事情就是为这个表选择数据集,选择表,右击表,选择Properties,在弹出的Table Properties General Tab的DataSet Name中选择我们刚到加入的数据集,你需要记住这个名字,因为有的时候你可能会用到。

RDLC 报表系列(一) 创建一个报表

  图片看不清楚?请点击这里查看原图(大图)。

RDLC 报表系列(一) 创建一个报表

  图片看不清楚?请点击这里查看原图(大图)。

  9. 绑定数据到数据行,选择数据行中的第一列,右击选择Expression…,然后在Expression窗口中,选择Category中的,DataSets,然后Item中自动的会列出你已经增加的Data Source,选择一个Data Source,他会为你列出所有的字段,选中你要的字段双击即可到上面的编辑框中(默认的没有直接绑定到每一行的数据),你也可以在编辑框中自己输入如Fields!Category.Value来选择数据,其中Category是字段名,当你输入Fields!后会自动提示你有哪此字段。选择后点击OK,其它的字段也以同样的方法设置即可。

RDLC 报表系列(一) 创建一个报表

  图片看不清楚?请点击这里查看原图(大图)。

RDLC 报表系列(一) 创建一个报表

  图片看不清楚?请点击这里查看原图(大图)。

  10. 上面我们已经完成了新增数据集,设置报表模板,为模板中的控件绑定数据集,那下面我们就来看一下如何提供数据给这个数据集,以及如何实现报表。

  首先,我们在项目的根目录下新建一个类叫CustomPageBase.cs,他主要用来实现生成报表,代码如下:

 1 #region Copyright(C) 2009 Xiong Wei All rights reserved.
 2 
 3  // ==============================================================================
 4  // Copyright(C) 2009  Xiong Wei
 5  //
 6  // SYSTEM NAME            : 
 7  // COMPONENT ID            : RCLC.CustomPageBase
 8  // COMPONENT DESC       : 
 9  //
10  // CREATED DATE/BY        : 2009 / Xiong Wei
11  //
12  // REVISION HISTORY     :
13 // DATE/BY  ISSUE#/SR#/CS/PM#/OTHERS    DESCRIPTION OF CHANGE
14 // 
15 // 
16 // ==============================================================================
17 
18 #endregion
19 using System;
20 using System.Data;
21 using System.Configuration;
22 using System.Linq;
23 using System.Web;
24 using System.Web.Security;
25 using System.Web.UI;
26 using System.Collections.Generic;
27 using Microsoft.Reporting.WinForms;
28 
29 namespace RCLC
30 {
31     public class CustomPageBase : Page
32     {
33         public void GetReportMultipleDataSourceFile(List<ReportDataSource> reportDateSource, string TemplatePath, List<ReportParameter> parameterList, string FileType)
34         {
35             string reportFormat = FileType;
36             string outputfile = "Report.";  //报表名称
37             ReportViewer rview = new ReportViewer();
38             rview.ProcessingMode = ProcessingMode.Local;
39             rview.LocalReport.ReportPath = Server.MapPath(TemplatePath);
40             rview.LocalReport.DataSources.Clear();
41             foreach (ReportDataSource re in reportDateSource)
42             {
43                 rview.LocalReport.DataSources.Add(re);
44             }
45 
46             if (parameterList.Count > 0)
47                 rview.LocalReport.SetParameters(parameterList);
48             string mimeType, encoding, extension, deviceInfo;
49             string[] streamids;
50             Warning[] warnings;
51             deviceInfo = "<DeviceInfo>" + "<SimplePageHeaders>True</SimplePageHeaders>" + "</DeviceInfo>";
52 
53             byte[] bytes = rview.LocalReport.Render(reportFormat, deviceInfo, out mimeType, out encoding, out extension, out streamids, out warnings);
54 
55             //这里可以输入产生报表的时候有哪些警告信息
56             //if (warnings != null && warnings.Length > 0)
57             //{
58             //    LoggingManager log = LoggingManager.GetLoggingManager();
59             //    foreach (Warning w in warnings)
60             //    {
61             //        log.Info(w.Message);
62             //    }
63             //}
64             HttpContext.Current.Response.Buffer = true;
65             HttpContext.Current.Response.Clear();
66             HttpContext.Current.Response.ContentType = mimeType;
67             HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + outputfile + extension + ";");
68             HttpContext.Current.Response.BinaryWrite(bytes);
69             HttpContext.Current.Response.End();
70         }
71     }
72 }
73 然后让Default.aspx.cs继承CustomPageBase,然后在Default页面中新增一个Button,在Button的事件中提供产生Report所需要的参数,如下:

 1 using System;
 2 using System.Collections;
 3 using System.Configuration;
 4 using System.Data;
 5 using System.Linq;
 6 using System.Web;
 7 using System.Web.Security;
 8 using System.Web.UI;
 9 using System.Web.UI.HtmlControls;
10 using System.Web.UI.WebControls;
11 using System.Web.UI.WebControls.WebParts;
12 using System.Data.SqlClient;
13 using System.Collections.Generic;
14 using System.Xml.Linq;
15 using Microsoft.Reporting.WinForms;
16 using RCLC.DataEntity;
17 
18 namespace RCLC
19 {
20     public partial class _Default : CustomPageBase
21     {
22         protected void Page_Load(object sender, EventArgs e)
23         {
24 
25         }
26 
27         protected void ButtonReportGenerate_Click(object sender, EventArgs e)
28         {
29             List<ReportDataSource> reportDataSource = new List<ReportDataSource>();
30             RportDataSet ds = new RportDataSet();
31             string templatePath = string.Empty;
32             string totalRecords = string.Empty;
33 
34             //获得数据
35             SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoggingConnectionString"].ConnectionString);
36             SqlCommand command = conn.CreateCommand();
37             command.CommandType = CommandType.Text;
38             command.CommandText = "SELECT * FROM T_BC_LOGS";
39             SqlDataAdapter da = new SqlDataAdapter(command);
40             da.Fill(ds.T_BC_LOGS);
41 
42             //指定报表模板
43             templatePath = "ReportTemplate/LogReport.rdlc";
44 
45             //把获取的数据集合提供给在报表中名为RportDataSet_T_BC_LOGS数据集
46             reportDataSource.Add(new ReportDataSource("RportDataSet_T_BC_LOGS", ds.T_BC_LOGS));
47             List<ReportParameter> parameterList = new List<ReportParameter>();
48             Generate Report, 报表可以生成PDF,EXCEL及以其它形式,根据需求去设置
49             GetReportMultipleDataSourceFile(reportDataSource, templatePath, parameterList, "pdf");
50         }
51     }
52 }
53 

 

  最后,选择这个页面,点击button就呆以产生你所需要的页面了,如下图所示。

RDLC 报表系列(一) 创建一个报表

  图片看不清楚?请点击这里查看原图(大图)。

  四.总结

  通过这个项目,我们可以了解到如下内容:

  如何创建一个DataSet

  创建和编辑RDLC报表模板并绑定到数据集上

  通过代码为RDLC提供参数

 

Reference: http://tech.ddvip.com/2009-10/1255676290135692_6.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值