程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> RDLC 報表系列(一) 創建一個報表

RDLC 報表系列(一) 創建一個報表

編輯:關於.NET

本文只代表作者在一定階段的認識與理解。

一.寫作前提

前一段時間寫了一篇關於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項目,如下圖所示。

2. 在項目中新建兩個文件夾,分別叫DataEntity和ReprotTemplate,如下圖, 至於這兩個文件夾主要用來存放什麼,在下面我們會講 到,這裡先不說。

3. 此項目需要引用Microsoft.Reporting.WinForms和System.Windows.Forms,所以我們需要右擊上圖中的References,然後在.NET Tab中找到我們所需要引用的Reference,點擊Ok,添加到我們的引用中去。

4. 右擊我們新建的DataEntity文件夾,選擇Addà New Item…,選擇左邊的Categories中的Data,然後選擇右邊的DataSet,輸入你的 DataSet 名字,然後點擊Add到這個文件夾下,至此我們知道DataEntity文件夾用來存放數據集。

5. 點擊Visual Studio IDE左邊的Server Explorer(如果左邊沒有,可以在View菜單中找到),然後選擇一個Database中的表,選擇拖 到DataSet中(如果還沒有IDE中還沒有Database影射,那麼可以選擇Toolsà Connect To Database…來連接到你需要的Database),當然 這個DataSet中的表也可以自己定義(在編輯區點擊右鍵,選擇新增表,然後在表中增加你需要的字段)。

6. 右擊我們新建的ReprotTemplate文件夾,選擇Addà New Item…,選擇左邊的Categories中的Reporting,然後選擇右邊的Report, 輸入你需要的名字,點擊Add,就樣我們就把一個Report的模板加入到ReprotTemplate文件夾中了,Report模板的編輯區如下面第二張圖所 示。

7. 下面我們要做的事情就是編輯這個報表模板,首先我們選擇這個報表所需要的數據集,點擊Report菜單下面的Data Source…,在彈 出的Report Data Source中,選擇我們添加在DataEntity中那個DataSet的表,如下圖所示。這裡也就說明了,DataEntity中存放的是RDLC 模板中所需要的數據集,為RDLC提供數據服務(除了DataSet以外,還有很多數據集,我們以後的內容中會講解這此)。

8. 然後我們在Visual Studio IDE的左邊的ToolBox中拖一個Table到我們的報表編輯區中,這個Table默認有三行三列,第一行是標題 行, 第二行是數據綁定行,第三行是表的頁腳行(如果你不想顯示其中的一部分你可以選中一行,然後右擊這一行的最左邊,取消或者選中即 可)。如下圖所示,我們在標題行對應的字段中輸入標題名,你也可以右擊到某一列,選擇新增一列在選擇列的左邊或者右邊。

接下來要做的事情就是為這個表選擇數據集,選擇表,右擊表,選擇Properties,在彈出的Table Properties General Tab的DataSet Name中選擇我們剛到加入的數據集,你需要記住這個名字,因為有的時候你可能會用到。

9. 綁定數據到數據行,選擇數據行中的第一列,右擊選擇Expression…,然後在Expression窗口中,選擇Category中的,DataSets, 然後Item中自動的會列出你已經增加的Data Source,選擇一個Data Source,他會為你列出所有的字段,選中你要的字段雙擊即可到上面 的編輯框中(默認的沒有直接綁定到每一行的數據),你也可以在編輯框中自己輸入如Fields!Category.Value來選擇數據,其中Category 是字段名,當你輸入Fields!後會自動提示你有哪此字段。選擇後點擊OK,其它的字段也以同樣的方法設 置即可。

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就呆以產生你所需要的頁面了,如下圖所示。

四.總結

通過這個項目,我們可以了解到如下內容:

1.如何創建一個DataSet

2.創建和編輯RDLC報表模板並綁定到數據集上

3.通過代碼為RDLC提供參數

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved