在VS.NET2005中使用免費報表(電腦報2006/09/11 第36期)

我們知道,在VS.NET2003下提供了Crystal Report報表,它功能強大,但是它是要收費的。現在,在VS.NET2005中我們有了另外一個選擇,而且它是完全免費使用的,那就是RDLC報表。下面,就讓我們一起來享受這份免費的大餐吧。

 

 

[一、認識RDLC報表]

RDLC的英文全稱是Report Definition Language Client-side processingClient-side processing強調了它的客戶端處理能力。RDLC報表基於報表定義 ,它是一個說明數據和佈局的XML文件,使用報表定義語言編寫。VS.NET2005提供了設計和使用這種報表的能力,Microsoft將這種報表的後綴定爲RDLC

相對於Crystal Report,它的功能並不遜色:

  •  WinFormWebForm中都可以使用;
  •  豐富的控件可以滿足各種報表樣式的需要;
  •  強大的數據處理能力,在報表中就可以對數據進行分組、排序、篩選;
  •  使用方便。不需要安裝額外的軟件,通過控件就可以輕鬆的實現導出ExcelPDF
  •  XML描述報表,使通用成爲可能;

 

 

[二、活用RDLC報表]

下面,我們通過一個實例來介紹如何在WinForm中使用RDLC報表中控件來實現多層報表樣式。希望能幫大家達到活用的目的。

1。定義數據源

首先創建一個Visual C#“Windows應用程序項目(ReportTest),然後選擇菜單數據”—“添加新數據源。在打開的數據源配置嚮導中選擇數據庫,單擊下一步。在選擇你的數據連接頁中,筆者選擇的是SQL server 2000下的Northwind數據庫,單擊下一步。然後在選擇數據庫對象頁中,選擇表“Orders”,最後單擊完成按鈕,添加的數據源如圖1所示。

 


2
。添加報表

選擇菜單 添加新項,打開添加新項對話框。選擇報表圖標,輸入名稱,單擊添加按鈕,將打開報表設計器。在工具箱中雙擊控件,將數據源窗口中的OrderID字段拖至表的詳細信息行的第一列,可以看到詳細信息單元格顯示的是字段表達式“=Fields!OrderID.Value”,並且表頭行自動放置了標題,默認是字段名。依次在其他單元格放上相應字段,結果如圖2所示。

 


3
。設置字段格式

右鍵單擊包含 OrderDate 字段表達式的單元,在彈出菜單中選擇屬性 格式選項卡單擊格式代碼後的第2個按鈕,打開選擇格式對話框。爲OrderDate 字段選擇合適的格式(如圖3),單擊確定即可。

 


4
。添加分組

組可以用來顯示遞歸層次結構,比如顯示每個客戶(Customer)對應的訂單(Order)。

單擊選中表,在詳細信息行最左邊單擊右鍵,在彈出菜單中選擇插入組 常規選項卡上的分組方式框中,在第一行選擇“=Fields!CustomerID.Value”,如圖4所示,這將按照CustomerID對數據進行分組。最後單擊確定 表中將添加組頭和組尾兩個新行。

 



5
。設置詳細信息排序方式

單擊選中表,在表的左上角單擊右鍵,在彈出菜單中選擇屬性,打開表屬性對話框。排序選項卡上的排序方式框中,在第一行選擇 “=Fields!OrderDate.Value”,在第二行選擇 “=Fields!OrderID.Value”,排序方式設爲先按日期降序排列,然後再按訂單號升序排列,如圖5所示。

在上面分組屬性對話框中同樣可以設置組的排序方式。


6
。添加公式

爲了計算每個Customer的訂單數。右鍵單擊組尾的第一個單元格,在彈出菜單中選擇表達式,在編輯表達式對話框的上部書寫表達式=Count(Fields!OrderID.Value)。如果不太清楚公式的含義,可以在下方的類別樹中選擇,說明窗口會有相應的提示,如圖6所示

 


7
。顯示報表

VS.NET2005提供了一個專門的ReportViewer控件用來顯示RDLC報表。在Form1上添加一個button控件和一個ReportViewer控件。在button控件的Click事件中編寫如下代碼:

private void button1_Click(object sender, EventArgs e)

{

//設置數據源

reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NorthwindDataSet_Orders", LoadData()));

//設置報表

reportViewer1.LocalReport.ReportEmbeddedResource = "ReportTest.Report1.rdlc";

this.reportViewer1.RefreshReport();

}

這裏沒有使用最開始綁定的數據源,而是用LoadData函數設置數據,這樣的好處是如果修改了數據源,比如從Access轉到SQL server,報表不需要做任何修改,但必須保證數據源架構相同。代碼如下:

private DataTable LoadData()

{

SqlConnection con = new SqlConnection("Data Source=servername;Initial Catalog=Northwind;Integrated Security=True");

SqlCommand cmd = new SqlCommand("select * from orders where orderdate>='1998/01/01' order by customerid", con);

SqlDataAdapter adp = new SqlDataAdapter(cmd);

DataSet ds = new DataSet();

adp.Fill(ds);

return ds.Tables[0];

}

因爲報表的生成操作屬性默認是嵌入的資源,所以需要設置ReportEmbeddedResource屬性,如果是使用外部文件,代碼如下:

reportViewer1.LocalReport.ReportPath = "Report1.rdlc";

 

最後的效果如圖7所示,怎麼樣,效果不錯吧?

 


(刊登於 電腦報2006/09/11 第36期)
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章