前一段時間,由於在項目中要用到報表做統計,所以我學習了一下ASP.NET水晶報表的使用。水晶報表的執行模式(也就是取資料的方法)可以分為兩種:
第一種是Pull模式:被請求時,水晶報表直接根據指定的驅動串連資料庫然後組裝這些資料。
另外一種就是Push模式:此時開發人員不得不自己編寫代碼串連資料並組裝DataSet,同時將它傳送至報表。在些這種情況下,通過使用串連共用以及限制記錄集合的大小,可以使用報表效能最大化。
水晶報表中的報表類型也分為兩種:
--StrongTyped 報表: 當你將報表檔案加入到項目中去時,它就變成了一個了“ strongly-typed“報表。在這些情況下,你將擁有直接建立報表的對象的權力,這將減少一些代碼並且能夠提供一些效能。
--UnTyped報表:這裡的報表並不直接包含在項目中,因此稱為‘un-typed' 報表。在這種情況下,你不得不使用水晶報表的”ReportDocuemt“對象建立一個執行個體,並且”手動“地凋用報表。
使用Pull模式 我們將通過下面的這些步驟來通過Pull模式來執行水晶報表
1.首先建立rpt檔案,並使用水晶報表設計介面設定一些必須的資料連線。
2.拖放一個 CrystalReportViewer控制項至aspx頁面,設定它的屬性指定我們上一步建立的.rpt檔案。
3. 在代碼中調用DataBind方法。
複製代碼 代碼如下:
ReportDocument ReportDoc = new ReportDocument();
ReportDoc.Load(Server.MapPath("MyPullDemo.rpt"));
#region 解決登入錯誤問題
TableLogOnInfo logonInfo = new TableLogOnInfo();//
foreach( CrystalDecisions.CrystalReports.Engine.Table tb in ReportDoc.Database.Tables)
{
logonInfo = tb.LogOnInfo;
logonInfo.ConnectionInfo.ServerName = "(local)";
logonInfo.ConnectionInfo.DatabaseName = "myDatabase";//
logonInfo.ConnectionInfo.UserID = "sa";
logonInfo.ConnectionInfo.Password = "sa1234";//
tb.ApplyLogOnInfo(logonInfo);
}
#endregion
CrystalReportViewer1.ReportSource = ReportDoc;
CrystalReportViewer1.DataBind();
使用PUSH模式
我們採用下面的幾步使用Push模式執行水晶報表:
1. 設計一個DataSet
2. 建立一個.rpt檔案同時將其指定給上一步建立的DataSet。
3. 在aspx頁面中拖放一個CrystalReportViewer控制項同時將其與前面的rpt檔案建立聯絡。
4. 在代碼中訪問資料庫並把資料存入DataSet
5. 調用DataBind方法。
複製代碼 代碼如下:
ReportDocument ReportDoc = new ReportDocument();
ReportDoc.Load(Server.MapPath("MyPushDemo.rpt"));
string strProvider = "Server=(local);DataBase=myDatabase;UID=sa;PWD=sa1234";
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "Select * from SaleOfCuntry";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
--這裡的ds與.rpt檔案串連資料庫所用的DataSet結構完全相同,名稱可以不同
建立.rpt檔案時DataSet的作用是為rpt檔案提供一種架構。
這裡 用dataadapter填充資料集的一個執行個體,作為報表的資料來源。
複製代碼 代碼如下:
DataSet ds = new DataSet();
MyAdapter.Fill(ds,"SaleOfCuntry");
ReportDoc.SetDataSource(ds);
Crv.ReportSource = ReportDoc;
Crv.DataBind();