一.我們採用下面的幾步使用Push模式執行水晶報表:
1. 設計一個DataSet
2. 建立一個.rpt檔案同時將其指定給上一步建立的DataSet。
3. 在aspx頁面中拖放一個CrystalReportViewer控制項同時將其與前面的rpt檔案建立聯絡。
4. 在代碼中訪問資料庫並把資料存入DataSet
5. 調用DataBind方法。
oRpt = new ReportDocument();
string RptDir =Server.MapPath("MyReport.rpt");
//Response.Write(RptDir);
//string RptDir = "E://vs2005//ASPcrystal//MyReport.rpt"; //crystalreport1.rpt檔案所在的絕對路徑
oRpt.Load(RptDir);
SqlConnection con = new SqlConnection("server=.;database=northwind;uid=sa;pwd=;");
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from customers", con);
DataSet ds = new DataSet();
da.Fill(ds, "customers");
oRpt.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oRpt;
二.C#.Net的WinForm中使用水晶報表
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
MyReport mydoc = new MyReport();
mydoc.SetDataSource(ds.Tables["persontb"]);
crystalReportViewer1.ReportSource = mydoc;
TextObject tb = (TextObject)mydoc.ReportDefinition.ReportObjects["Text13"];
tb.Text = vievprint.content;
三.使用Pull模式
我們將通過下面的這些步驟來通過Pull模式來執行水晶報表 1.首先建立rpt檔案,並使用水晶報表設計介面設定一些必須的資料連線。 2.拖放一個 CrystalReportViewer控制項至aspx頁面,設定它的屬性指定我們上一步建立的.rpt檔案。 3. 在代碼中調用DataBind方法。1) 在右擊”解決方案遊覽器“,在彈出的菜單中選擇”添加“--”添加新項“-->”Crystal Report” 2) 在”Crystal Report 庫”中選擇”作為空白報表“選項按鈕,最後單擊“確定“。 3)這裡將彈出水晶報表設計師。 4) 右擊報表中的”詳細資料區”,選擇“資料庫”->“添加/刪除資料庫..." 5) 在彈出的”資料庫專家“中,擴充”OLE DB(ADO)“選項,此時會彈出另外一個”OLE DB(ADO)“視窗。 6) 在 "OLE DB (ADO)" 快顯視窗中,選擇 "Microsoft OLE DB Provider for SQL Server" 然後 "Next" 7) 指定串連的資訊 伺服器 : ASPCN (您的機器是什麼名字就寫什麼) 使用者識別碼: sa 密碼: 資料庫 : Pubs 8) 單擊”Next“,最後單擊”Finish“按鈕。 9) 這時你就能在”資料庫專家“視窗中看到我們選擇的資料庫。 10) 擴充”Pubs“資料庫,擴充”表“,選擇”Stores“表並將其加到”選定的表“區中,單擊”OK"按鈕。 11) 現在在”欄位資源總管“中就會在左邊”資料庫欄位“區中顯示你選擇的表,以及表中的欄位。 12) 拖放需要的欄位進入報表的”詳細資料“區。欄位名將會自動出現在”頁首“區。如果你想修改頭部文字,則可以右擊”頁首“區中的文字,選擇”編輯文字物件“選項並進行編輯。 13) 儲存,這樣我們就有了一個水晶報表檔案。 建立 CrystalReportViewer 控制項 14) 回到前面的WebForm中,拖放一個Crystal Report Viewer控制項到頁面中去。 15) 調出Crystal Report Viewer控制項的屬性視窗,選擇“DataBindings"區點擊[...] 16) ”Crystal Report Viewer 資料繫結視窗”中,在右邊的“可綁定屬性”中選擇”ReportSource“,並選擇右下角的“自訂綁定運算式”中指定.rpt檔案路徑。 而在2005中直接建立ReportSourceID選擇指定.rpt即可. 17) 此時你能夠從Crystal Report Viewer 控制項中看到使用一些虛擬資料群組成的報表檔案的預覽。 注意:在上面的例子中,CrystalReportViewer可以在設計時直接調用真實的資料,因為此時資料已經儲存。在這種情況下,設計時當沒有儲存資料時,他是不能顯示資料的。取而代這的是顯示一些虛擬資料,只有在執行時才會選取真實的資料。
Code Behind 程式設計
18) 在Page_Load方法中調用DataBind方法。
protected void Page_Load(object sender, EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo();
oRpt = new ReportDocument();
string RptDir = "E://vs2005//ASPcrystal//MyReport.rpt"; //crystalreport1.rpt檔案所在的絕對路徑
oRpt.Load(RptDir);
logOnInfo.ConnectionInfo.ServerName = "Hpc";
logOnInfo.ConnectionInfo.DatabaseName = "Northwind";
logOnInfo.ConnectionInfo.UserID = "sa";
logOnInfo.ConnectionInfo.Password ="";
oRpt.Database.Tables[0].ApplyLogOnInfo(logOnInfo);
this.CrystalReportViewer1.ReportSource = oRpt;
}
執行你的程式
20.若要產生pdf文檔 在以上代碼中加入
ExportOptions crExportOptions=new ExportOptions();
DiskFileDestinationOptions crDiskFileDestinationOptions=new DiskFileDestinationOptions();
crDiskFileDestinationOptions.DiskFileName="f://bbs//test//crystal//crystalreport1.pdf";
crExportOptions=oRpt.ExportOptions ;
crExportOptions.DestinationOptions=crDiskFileDestinationOptions;
crExportOptions.ExportDestinationType =ExportDestinationType.DiskFile;
crExportOptions.ExportFormatType =ExportFormatType.PortableDocFormat ;
oRpt.Export();
oRpt.Close();
讀取報表匯出的內容並傳到用戶端?繼續加入以下代碼
Response.ClearContent();
Response.ClearHeaders ();
Response.ContentType ="application/pdf";
Response.WriteFile("f://bbs//test//crystal//crystalreport1.pdf");
Response.Flush();
Response.Close();