一、使用vs內建的ReportViewer控制項
本樣本操作 主要實現
a. ReportViewer關聯Report1.rdlc的簡單呈現
b. 對帶有報表參數的Report1.rdlc的呈現
c. 利用程式產生的DataSet 填充報表
d. 調用預存程序 產生DataSet 填充報表
==========
簡單的呈現
==========
1. 開啟VS2005,檔案->建立->網站 選擇語言種類(C#)
2. 在該解決方案下 設計其已經產生的Default.aspx
3. 將工具箱-資料下的ReportViewer 拉入Default.aspx的設計介面
4. 在用滑鼠選中ReportViewer1時 可以看到其右上方的 小三角 表徵圖
5. 用滑鼠點擊該小三角 將展開 ReportViewer任務 捷徑功能表
6. 由於本項目 目前還沒有做好的報表 所以 選擇 設計新報表
7. 點擊 設計新報表 後 將呈現報表Report1.rdlc的設計介面
8. 由於本項目 目前還沒有做好的網站資料來源
所以 此時要添加新資料來源
(如果沒有呈現“網站資料來源”介面,可以點擊報表設計介面,
此時上方菜單中多出現“資料”,“報表”等選項
可以在“資料”菜單下,選擇“顯示資料來源”)
9. 點擊“添加新資料來源” 會出現“TableAdapter 設定精靈”
10. 選擇資料連線(如串連到原生Northwind資料庫),下一步
11. 選擇是否要將連接字串儲存到應用程式設定檔中,下一步
12. 選擇命令類型,此時 可以 點擊 取消 按鈕,退出嚮導
13. 全部儲存
14. 選擇 視圖 菜單 下 “伺服器總管”,
可以看到剛才所建立的資料連線,
可以看到Northwind資料庫下的表,視圖,預存程序,函數
15. 在解決方案的樹下 找到並開啟App_Code檔案夾下的DataSet1.xsd資料集
16. 可以看到 開啟的DataSet 設計工具 是空的,此時可以將“伺服器總管”
下的Northwind的表或預存程序等 拉入 DataSet 設計工具
(如此時 拉入了Orders表 和 Sales by Year這個預存程序)
17. 全部儲存
18. 雙擊Report1.rdlc,開啟報表設計介面
將此時的報表設計工具箱中的 報表專案 的 表 拉入 報表設計介面
19. 選擇 “資料”菜單下的“顯示資料來源”,
可以在網站資料來源下 看到 DataSet1 下的 兩個 表 orders 和 Sales by Year
20. 此時選擇Orders下的任意欄位 (如OrderID 和 CustomerID)
拉到Report1.rdlc設計介面的表的“詳細資料”處 用於報表顯示
21. 全部儲存
22. 回到Default.aspx的設計介面,為ReportViewer1 綁定報表
選擇ReportViewer1顯示剛才設計好的Report1.rdlc
23. 全部儲存,按F5或Ctrl F5 運行,以查看初步效果
======================================
接下來要為Report1.rdlc添加一個報表參數
======================================
24. 回到報表Report1.rdlc的設計介面
點擊 報表 菜單 下的“報表參數”
25. 在報表參數在設定框中 添加一個報表參數 進行相關設定 並 確定以儲存
(如其參數名稱為rptParaA,類型為String)
26. 拉入一個文字框的報表專案到Report1.rdlc的設計介面 以做為該報表的標題顯示
27. 選中並按右鍵該文字框,在彈出的菜單中選擇“運算式”,
進入“編輯運算式”的對話方塊
28. 在“編輯運算式”的對話方塊中,選擇 參數,
並雙擊剛才設定的rptParaA,使文字框的值=Parameters!rptParaA.Value
29. 儲存對Report1.rdlc的修改
30. 因為新的Report1.rdlc報表的文字框需要有報表參數值的傳入
所以要在ReportViewer1 對Report1.rdlc的呈現時
對Default.aspx.cs的編輯
31. 在Default.aspx.cs加入引用
using Microsoft.Reporting.WebForms;
在Page_Load中加入如下代碼
ReportParameter rptParaA = new ReportParameter("rptParaA", "測試報表參數");
ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rptParaA });
32.儲存並運行 以查看效果
=========================================
接下來,需要對所要轉譯報表資料 進行定製
也就是通過設計DataSet
用符合需要的資料對報表進行資料綁定和呈現
=========================================
33.設定ReportViewer1的Visible為false
34.在Default.aspx的設計介面 加入一個按鈕Button1
將通過此按鈕的Click事件 實現對資料庫的訪問 以及DataSet的資料填充
和對ReportViewer1的資料綁定
35. Default.aspx.cs加入引用
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
Button1_Click中的程式碼範例如下
SqlConnection myConn = new SqlConnection("Data Source=192.168.0.36;Initial Catalog=Northwind;User ID=sa;Password=sa");
SqlDataAdapter myda = new SqlDataAdapter("select top 5 * from orders", myConn);
DataSet myds = new DataSet();
myConn.Open();
myda.Fill(myds);
myConn.Close();
ReportViewer1.Visible = true;
ReportParameter rptParaA = new ReportParameter("rptParaA", "測試報表參數");
ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rptParaA });
ReportDataSource rds = new ReportDataSource("DataSet1_Orders", myds.Tables[0]);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();
注意ReportDataSource rds = new ReportDataSource("DataSet1_Orders", myds.Tables[0]);
的"DataSet1_Orders"是與前台html程式的
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt" Height="400px" Visible="False" Width="400px">
<LocalReport ReportPath="Report1.rdlc">
<DataSources>
<rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1_Orders" />
</DataSources>
</LocalReport>
</rsweb:ReportViewer>
中的<DataSources>的Name="DataSet1_Orders"是一致的
可以通過對DataSet的填充時的sql語句等的定製 來得到所需要的資料 以便報表轉譯
需要注意的是由於ReportViewer1此時的關聯報表為Report1.rdlc,所以DataSet的Tables[0]中的結構
一定要包含Report1.rdlc所呈現的欄位,所以,這裡的Sql語句為select top 5 * from orders
36.儲存 運行 點擊Button1 以便 報表轉譯
===============================================
如果 報表所要呈現的資料 來源於預存程序
那麼 在裝載DataSet時 使其資料來源於預存程序即可
===============================================
37.右擊項目 添加新項 ,選擇 報表,向項目中加入Report2.rdlc,
設定其呈現的資料來源為預存程序 Sales by Year
同樣的在Report2.rdlc的設計介面 加入“表”報表專案
並將網站資料來源下的DataSet1下的Sales by Year表中的欄位
拉入報表專案“表”在詳細資料中 進行顯示
38.如同Default.aspx 向項目中添加新的頁面Default2.aspx
向Default2.aspx加入一個Button 和 ReportViewer1
並設定ReportViewer1所要轉譯報表為Report2.rdlc
設定ReportViewer1的Visible為false
雙擊Button 進行其Click事件的編寫
設定Default2.aspx為項目的起始頁
39.在Default2.aspx.cs加入引用
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
40.Button1_Click的事件程式碼範例如下
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection myConn = new SqlConnection("Data Source=192.168.0.36;Initial Catalog=Northwind;User ID=sa;Password=sa");
SqlDataAdapter myda = new SqlDataAdapter("Sales by Year", myConn);
myda.SelectCommand.Parameters.AddWithValue("@Beginning_Date", "1997-10-10");
myda.SelectCommand.Parameters.AddWithValue("@Ending_Date", "2000-10-10");
myda.SelectCommand.CommandType = CommandType.StoredProcedure;
DataSet myds = new DataSet();
myConn.Open();
myda.Fill(myds);
myConn.Close();
ReportViewer1.Visible = true;
ReportDataSource rds = new ReportDataSource("DataSet1_Sales_by_Year", myds.Tables[0]);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();
}
41.儲存 運行 點擊按鈕 報表效果查看
二、使用免費的第三方控制項WebChart
官方網址:http://www.carlosag.net/Tools/WebChart/
使用方法:http://www.cnblogs.com/dotnet010/archive/2007/12/29/1019305.html