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. 可以看到 打開的數據集設計器 是空的,此時可以將“服務器資源管理器”
     下的Northwind的表或存儲過程等 拉入 數據集設計器
     (如此時 拉入了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.保存 運行 點擊按鈕 報表效果查看
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章