2014年1月5日

Reporting Services依筆數分頁;動態分頁-轉出Excel不分sheet(1)

本篇將說明兩個解決方案:
  • Reporting Services依筆數分頁
  • 匯出Excel 時不要將每頁分成好幾個 sheet
Reporting Services依筆數分頁,網路上的解法很多有在SQL建立每頁群組編號 ,這方法會因為SQL導致SQLSERVER負擔。
也有透過增加群組進行分頁,無SQLSERVER負擔,但平白多了一個欄位,也無法解決匯出Excel 時每頁分成好幾個 sheet。
以下將透過Tablix成員來進行分頁控制,資料庫是AdventureWorks2012,工具VS2012+Report Viewer 2012。
  1. 新增一web空白專案
    image
  2. 新增項目【報表】
    image
  3. 新增項目:資料集,命名AdventureWorks2012.xsd
    image
  4. 加入資料庫連接
    伺服器總管-資料連接-右鍵-加入連結
    image
    設定號按確定後,就可以看到我們設定的資料連接
    image
  5. 建立資料表Databaselog,只要將左邊資料表Databaselog拖曳到資料集編輯畫面
    image
  6. 切換到Report1.rdlc,設定資料集
    報表資料-資料集-右鍵-加入資料集
    image
    設定資料集,命名rptdsDatabasLog,資料來源:AdventureWoeks2012,可用資料集:DatabaseLog
    image
    確定後就會產生我們的資料集
    image
  7. 到工具箱,拖拉一個資料表,Name:TablixDatabaseLog
    image
  8. 切到報表資料,將DatabaseLogID,拖拉到資料欄
    image
    PostTime, DatabaseUser也同樣做法
    image
  9. 新增項目【Web Form】:WebForm1.aspx
  10. 拖拉ReportViewer,ScriptManager到頁面上
    image
  11. 到code-behind:WebForm1.aspx.cs
    加入Using
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    using Microsoft.Reporting.WebForms;
  12. 以下是抓取資料,填到報表的程式
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    using Microsoft.Reporting.WebForms;
    namespace WebReporting
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    BindReport();
                }
                    
            }
    
            private DataTable FetchData()
            {
                string sql = "Select * from databaseLog";
                String conStr =
                    ConfigurationManager.ConnectionStrings[
                        "AdventureWorks2012ConnectionString"].ConnectionString;
    
                SqlDataAdapter da = new SqlDataAdapter(sql, conStr);
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
    
            private void BindReport()
            {
                ReportDataSource rds = new ReportDataSource();
                rds.Name = "rptdsDatabasLog"; //報表的資料集名稱
                rds.Value = FetchData(); //填入報表資料(dataTable)
    
                ReportViewer1.LocalReport.ReportPath = "Report1.rdlc"; //local report名稱
                ReportViewer1.LocalReport.DataSources.Clear();
                ReportViewer1.LocalReport.DataSources.Add(rds);
    
                ReportViewer1.LocalReport.EnableExternalImages = true;
    
                ReportViewer1.LocalReport.Refresh();
            }
        }
    }




  13. 產生的報表

    image 


接著進行依照筆數進行分頁,並解決Excel會分成多個Sheet問題:

>>Reporting Services依筆數分頁;動態分頁-轉出Excel不分sheet(2)

沒有留言:

張貼留言