水晶報表基礎操作技巧

水晶報表
1、水晶報表註冊碼
在使用Vs.net自帶的水晶報表時,請註冊,否則只能使用30次,水晶報表註冊碼如下:
註冊號:6707437608
密碼:AAP5GKS0000GDE100DS
2、Asp.Net中使用水晶報表
我們採用下面的幾步使用Push模式執行水晶報表:
1)設計一個DataSet
右擊“解決方案瀏覽器”,選擇“添加”--“添加新項”-->“數據集”,從“服務器資源管理器”中的“SQL Server”中拖放“Stores”表(位於PUBS數據庫中)。再將此表拖入數據集中。而 .xsd文件中僅僅包含一個結構圖,但是不會有任何數據在裏面。
2)創建一個.rpt文件同時將其指定給上一步建立的DataSet。
使用上面的介紹過的方法創建此文件,唯一的不同就是使用數據集來代替前面的直接連接數據。建立.rpt文件之後,右擊“詳細資料”-->“添加/刪除數據庫”,在”數據庫專家“窗口中,展開”項目數據“(代替以前的OleDb),展開“ADO.Net數據集”--“DataSet1”,選擇“Stores”表。將“Stores”表添加到“選定的表”中,點擊“OK”。
3)在aspx頁面中拖放一個CrystalReportViewer控件同時將其與前面的rpt文件建立聯繫。
使用PULL模式下的方法,建立一個WebForm,添加一個Crystal Report Viewer 控件,並設定其屬性,此處與PULL模式下是一致的。代碼如下:
private MyReport oCR;//MyReport爲MyReport.aspx.csk中的類名
private void Page_Load(object sender, System.EventArgs e)
{
DataSet1 ds = new DataSet1();
oCR = new MyReport();
SqlConnection MyConn = new SqlConnection(ConfigurationSettings.AppSettings["SqlConn"]);
MyConn.Open();

//直接訪問數據表
//string strSel = "select * from tbtree";
//SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
//MyAdapter.Fill(ds,"tbtree");

//使用存儲過程
SqlCommand cmd = new SqlCommand("display", MyConn);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter MyAdapter = new SqlDataAdapter(cmd);
MyAdapter.Fill(ds,"tbtree");

oCR.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oCR;
this.CrystalReportViewer1.DataBind();
}
注意:在上面的代碼中,你得注意一下oRpt是"Strongly Typed"的報表文件。如果你需要使用"UnTyped"報表,你得使用ReportDocument對象,然後再調用報表文件。
4)在代碼中訪問數據庫並把數據存入DataSet
5)將報表文件導出成爲其它格式
你能夠將報表文件導出成爲下列格式:
(1) PDF (Portable Document Format)
(2) DOC (MS Word Document)
(3) XLS (MS Excel Spreadsheet)
(4) HTML (Hyper Text Markup Language – 3.2 or 4.0 compliant)
(5) RTF (Rich Text Format)
使用Pull模式導出報表,當導出使用Pull模式創建的文件時,水晶報表準確地打開所需要的數據,首先在HTML中加入一個<DIV>元素和控件
<DIV id="div_opt" style="Z-INDEX: 102; LEFT: 320px; WIDTH: 360px; POSITION: absolute; TOP: 24px; HEIGHT: 32px" ms_positioning="FlowLayout">
<asp:linkbutton id="lbtn_IEPrint" runat="server">IE打印預覽</asp:linkbutton>&nbsp;格式轉換
<asp:dropdownlist id="ddl_FileFormat" runat="server">
<asp:ListItem Value="pdf">Pdf</asp:ListItem>
<asp:ListItem Value="doc">Word</asp:ListItem>
</asp:dropdownlist>
<asp:button id="btn_Change" runat="server" Text="轉換"></asp:button>
</DIV>
下面是執行導出功能的代碼:
private void lbtn_IEPrint_Click(object sender, System.EventArgs e)
{
if(lbtn_IEPrint.Text == "IE打印預覽")
{
CrystalReportViewer1.SeparatePages = false;
CrystalReportViewer1.DisplayToolbar = false;
lbtn_IEPrint.Text = "取消IE打印預覽";
}
else
{
CrystalReportViewer1.SeparatePages = true;
CrystalReportViewer1.DisplayToolbar = true;
lbtn_IEPrint.Text = "IE打印預覽";
}
}
private void btn_Change_Click(object sender, System.EventArgs e)
{
string filetype = "";
filetype = ddl_FileFormat.SelectedValue;
string contenttype = "";

string myfilename = Request.MapPath(".//")+Session.SessionID+"."+filetype;
CrystalDecisions.Shared.DiskFileDestinationOptions mydiskoptions = new CrystalDecisions.Shared.DiskFileDestinationOptions();
mydiskoptions.DiskFileName = myfilename;
CrystalDecisions.Shared.ExportOptions myExportOptions = oCR.ExportOptions;
myExportOptions.DestinationOptions = mydiskoptions;
myExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;

switch(ddl_FileFormat.SelectedItem.Value)
{
case "pdf":
contenttype = "application/pdf";
myExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
break;
case "doc":
contenttype = "application/msword";
myExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.WordForWindows;
break;
}

oCR.Export();

Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = contenttype;
Response.WriteFile(myfilename);
Response.Flush();
Response.Close();

System.IO.File.Delete(myfilename);
}

2、C#.Net的WinForm中使用水晶報表
1)在使用自帶的水晶報表時,請註冊,否則只能使用30次
2)使用CrystalReportViewer進行預覽
CrystalReportViewer控件允許在應用程序中查看 Crystal Report。ReportSource 屬性用於設置要查看哪個報表。該屬性設置之後,報表顯示在查看器中。報表源可以是ReportDocument、報表文件的路徑,也可以是強類型報表。
(1)打開“工具箱”,並將一個 CrystalReportViewer 拖到窗體上,我們命名爲rptVew。
(2)通過拖放操作將 Windows 窗體查看器調整到希望的大小並將其移動到所需位置。
(3)當運行應用程序時,報表將顯示在查看器中。
3)創建新報表
(1)指向“添加”,單擊“添加新項”。
(2)在“添加新項”對話框中,從“模板”區域選擇 Crystal Report,將報表命名爲rptClient,單擊“打開”。
(3)在 Crystal Report 庫中,選擇下列選項之一:
A.使用報表專家 -> 指導您完成報表的創建過程,並將您的選擇添加到 Crystal Report Designer。
B.作爲空白報表 -> 打開 Crystal Report Designer。
C.來自於現有的報表 -> 創建新報表,它與指定的另一報表設計相同。
注意 Crystal Report 庫包含許多專家,可以指導您完成數個特定類型報表的創建工作。您可能希望使用專家來創建最初的報表,以確定哪種報表構造方法適合您的需要。
(4)單擊“確定”按鈕。
如果選擇使用“報表專家”,便會出現“報表專家”對話框,並帶有數據資源管理器。爲每個文件夾選擇所需數據,完成“報表專家”選項卡界面上的操作,然後單擊“完成”來訪問 Crystal Report Designer 和您的報表。
(5)是否需要動態設置數據源?
Crystal Reports 通過數據庫驅動程序與數據庫連接。每個驅動程序都被編寫爲可處理特定數據庫類型或數據庫訪問技術。拉和推模型,爲了向開發人員提供最靈活的數據訪問方法,Crystal Reports 數據庫驅動程序被設計爲可同時提供數據訪問的拉模型和推模型。
拉模型pull:在拉模型中,驅動程序將連接到數據庫並根據需要將數據“拉”進來。使用這種模型時,與數據庫的連接和爲了獲取數據而執行的 SQL 命令都同時由 Crystal Reports 本身處理,不需要開發人員編寫代碼。如果在運行時無須編寫任何特殊代碼,則使用拉模型。
推模型push:相反,推模型需要開發人員編寫代碼以連接到數據庫,執行 SQL 命令以創建與報表中的字段匹配的記錄集或數據集,並且將該對象傳遞給報表。該方法使您可以將連接共享置入應用程序中,並在 Crystal Reports 收到數據之前先將數據篩選出來。
4)從 ADO.NET 數據集製作報表
從數據庫創建數據集對象
(1)在項目中新建一個架構文件:
在解決方案資源管理器中,右擊項目名,指向“添加”,然後單擊“添加新項”。在“添加新項”對話框的“類別”區域,展開文件夾,然後選擇“數據”。 在“模板”區域選擇“數據集”。 接受默認名稱 Dataset1.xsd。 這就創建了一個新的架構文件 (Dataset1.xsd),以後將用它來生成強類型數據集。該架構文件將顯示在 ADO.NET 數據集設計器中。
(2)指定數據庫位置:
在服務器資源管理器中,右擊“數據連接”並選擇“添加連接”。在“數據鏈接屬性”對話框中,單擊“提供程序”選項卡,然後選擇一個提供程序(例如 Microsoft OLE DB Provider for SQL Server)。 單擊“連接”選項卡,然後指定您的數據庫所在位置。在所需位置輸入服務器和登錄信息。 單擊“確定”按鈕。 此時,您的數據庫及其表和字段就出現在服務器資源管理器的“數據連接”節點下面。
(3)在解決方案資源管理器中,雙擊 Dataset1.xsd (如果它尚不是活動視圖)。 Dataset1.xsd 現在應顯示在“數據集”選項卡中。
(4)若要爲數據集建立架構,請將需要的表從服務器資源管理器中拖動到 Dataset1.xsd 的“數據集”選項卡上。
(5)單擊“保存 Dataset1.xsd”來保存“Dataset1.xsd”文件。
(6)在“生成”菜單上,單擊“生成”爲項目生成數據集對象。
ADO.NET 數據集對象提供數據的描述,從它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“數據庫專家”從 ADO.NET 數據集對象添加表。 請在使用“報表專家”創建新報表時調用“數據庫專家”。或者,要從一個已經使用 ADO.NET 建立好的報表中訪問“數據庫專家”,請在 Report Designer 中右擊,指向“數據庫”,然後單擊“添加/刪除數據庫”。將報表連接到 ADO.NET 數據集對象
(1)在“數據庫專家”中,展開“項目數據”文件夾。
(2)展開“ADO.NET 數據集”文件夾。
(3)選擇所需數據集對象。
例如,如果當時使用的是從項目“WindowsApplication1”的架構文件“Dataset1.xsd”中生成的數據集對象,則應該選擇“WindowsApplication1.Dataset1”。 選擇要向報表中添加的表,和使用其他數據源一樣。

5)動態改變數據源的代碼
DataSet dsdataSet = new DataSet();
rptClient() oRpt = new rptClient(); //已建立的報表rptClient
OleDbDataAdapter da=new OleDbDataAdapter("select * from TableName",conn);
da.Fill(dsdataSet,"TableName");
//使用“報表引擎”對象模型將填充的數據集,傳遞給報表
oRpt.SetDataSource(dsdataSet.Tables(0));
//將帶有數據的報表對象綁定到 Windows 窗體查看器,rptVew(CrystalReportViewer控件)
rptVew.ReportSource = oRpt;
注意 FillDataSet 方法可連接到指定的數據庫,提取數據,然後斷開數據庫連接。如果您希望將數據庫中的多個表添加到報表中,請使用 SQL JOIN 語句將這些表聯接在一起;然後在 FillDataSet 方法中指定一個結果表。

6)創建主從報表
在報表中,有許多報表是主從表結構,比如訂單與訂單商品明細,訂單是一個表中的一條記錄,而分錄是另一個表中的多條記錄,兩個表通過一個字段關聯起來,這種報表可利用其分組功能實現。
(1)新建一個工程
(2)往FORM1中添加一個CrystalReportViewer控件
(3)在服務噐資源管理器中連接到SQL SERVER 2000上的Northwind數據庫
(4)添加一個數據集Dataset1,將服務器資源管理器中的Orders和 Order Details加入到數據集中。
(5)添加一個水晶報表,使用報表專家,在項目數據中選擇“ADO.NET數據集”,插入表Orders和 Order Details,“鏈接”中是關聯字段的鏈接,在“字段”中選擇要顯示的主表和明細表的字段,組中選擇分組依據爲Orders表OrdersID字段,總計,圖表,選擇(可進行篩選),樣式(可設置報表標題),可自行設置。設置完後,點擊完成。
(6)在報表設計器中調整需要顯示的字段的位置、寬度等。
(7)在窗口中添加代碼。
public PrintForm()
{
InitializeComponent();

OleDbConnection conn=new OleDbConnection("data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa");
Dataset1() ds = new Dataset1();

OleDbDataAdapter da1=new OleDbDataAdapter("select * from orders",conn);
da1.Fill(ds,"orders");

OleDbDataAdapter da2=new OleDbDataAdapter("select * from [Order Details]",conn);
da2.Fill(ds,"Order Details");

CrystalReport1 oCR=new CrystalReport1();
oCR.SetDataSource(ds);
this.crystalReportViewer1.ReportSource = oCR;
}
(8)運行程序

3、水晶報表登陸失敗
using CrystalDecisions.Shared;
//聲明所需變量。
TableLogOnInfo logOnInfo = new TableLogOnInfo();
//對報表中的每個表依次循環。
for (int i=0;i < Report.Database.Tables.Count-1;i++)
{
//設置當前表的連接信息。
logOnInfo.ConnectionInfo.ServerName = serverNameTxt.Text;
logOnInfo.ConnectionInfo.DatabaseName = dbNameTxt.Text;
logOnInfo.ConnectionInfo.UserID = userNameTxt.Text;
logOnInfo.ConnectionInfo.Password = passwordTxt.Text;
Report.Database.Tables [i].ApplyLogOnInfo (logOnInfo);
}
注意 受密碼保護的 Microsoft Access 和 Paradox 等 PC 數據庫也使用該方法,但 LogOnInfo.ServerName爲數據文件的路徑, LogOnInfo.DatabaseName 要保留爲空。TableLogOnInfo 是屬於CrystalDecisions.Shared 命名空間的成員。要添加引用:using CrystalDecisions.Shared;。

4、水晶報表應用程序的發佈
1)安裝部署
安裝部署時,把水晶報表的msm打進去,註冊到服務器,要部署使用 Crystal Reports for Visual Studio .NET 2003 的程序,首先,找到以下7個文件(你可以 'C:/Program Files/Common Files/Merge Modules' 文件夾下找到):
Crystal_Database_Access2003.msm
Crystal_Database_Access2003_chs.msm
Crystal_Managed2003.msm
Crystal_Managed2003_chs.msm
Crystal_regwiz2003.msm
VC_User_CRT71_RTL_X86_---.msm
VC_User_STL71_RTL_X86_---.msm
接着,在解決方案資源管理器中,右擊安裝項目,指向“添加”,然後單擊“合併模塊”。在“添加模塊”對話框中,選擇上面的7個要添加到安裝項目的合併模塊,然後單擊“打開”。
還有,打開解決方案-->右鍵點擊 Crystal_regwiz2003.msm 的屬性,在“MergeMouduleProperties”裏的“License Key”填入:AAP5GKS0000GDE100DS(這個是你生成Crystal Report是用到的註冊號的密碼!)

2)部署水晶報表時的常見問題及解決方案
(1)載入報表時報錯
問題出在報表發佈上。發佈使用水晶報表的項目需要包含三種組件:報表(*.rpt)、模塊(*.msm)、運行庫(*.msm),這些模塊文件是在 C:/Program Files/Common Files/Merge Modules/ 目錄裏面。
A.報表(*.rpt):用戶編程時創建的水晶報表文件。
B.模塊(*.msm):
Managed.msm 該模塊包含了CR for VS .NET 的管理模塊,如 CrystalDecisions、CrystalReports.Engine.DLL、CrystalDecisions.Web.DLL, 和 CrystalDecisions.Windows.Forms.DLL……
Managed_chs.msm 是該模塊的中文版語言支持。
Database_Access.msm 該模塊包含了數據庫的驅動、與不同數據庫的聯結、報表導出爲 RTF 和 HTML 格式的文檔和圖表組件。
Database_Access_chs.msm 是此模塊的中文版語言支持。
Regwiz.msm 註冊信息模塊,非常重要,必需在這個模塊輸入水晶報表的註冊序列號,如果不填,編譯的時候就無法通過
C:運行庫(*.msm):
如果報表文件使用了 ADO.NET 的 dataset 數據集對象,那麼 VC_CRT.msm 和 VC_STL.msm 模塊也必須包含在安裝工程中。而且這兩個模塊的文件安裝屬性的/Module Retargetable Folder/項必須修改成爲系統目錄。在VS.NET安裝工程中,系統檢測出來的依賴項只有 dotNETFXRedist_x86_chs.msm 和 Managed.msm這兩個模塊,其他的模塊我們需要手動加入。

(2)部署到 Windows 98 / ME 時,出錯:/Load Report Failed/
這是因爲查詢引擎 DLL(CRQE.dll)在客戶計算機上沒有正確註冊。要解決這個問題,可以在客戶計算機上手動註冊 CRQE.dll,使用下面的命令:
regsvr32 /C:/program files/common files/Crystal Decisions/1.0/bin/CRQE.dll/
如果 CRQE.dll 沒有成功註冊,並且問題繼續存在,在客戶計算機上檢查 ATL.dll 的版本。ATL.dll for Windows 98/ME 正確的版本是 3.0.8449。通過使用下面三種方法中的任意一種方法,可以找到並註冊正確版本的 ATL.dll。
A.在客戶計算機上裝 IE6.0。
B.在客戶計算機上,手動複製和註冊 ATL.dll,然後運行用於 Crystal Reports 分發的安裝包。
C.將 ATL.msm 合併模塊添加到安裝工程,ATL.msm 是 Visual Studio installer 1.1 的一部分,可以去微軟的網站http://msdn.microsoft.com/vstudio/downloads/tools/vsi11/download.aspx下載, 添加辦法同上。

(3)在Win98的客戶端運行提示/該字段名未知/
報表在Win2000的客戶端一切正常,在Win98的客戶端運行提示/該字段名未知/?是因爲報表使用到的 sql server 數據庫中的字段名爲中文的緣故,將其字段名改名爲英文字段名。

(4)分發到客戶機時“查詢引擎出錯”
“安裝項目”要包含下列合併模塊:VC_CRT.msm ,VC_STL.msm ;此外,確保 Msvcr70.dll 和 Msvcp70.dll 在客戶計算機的“系統目錄”裏。

(5)load crpe32.dll failed
下面是cr9net_deployment.pdf說明中的部署Crystal Report 9的步驟:
打開 Windows 應用程序。 在解決方案資源管理器中,右擊 Windows 應用程序解決方案,指向“添加”,然後單擊“新建項目”。在“添加新項目”對話框中,選擇“項目類型”窗格中的“安裝和部署項目”,然後選擇“模板”窗格中的“安裝項目”。單擊“確定”按鈕。
在解決方案資源管理中,右擊安裝項目,指向“添加”,然後單擊“項目輸出”。 在“添加項目輸出組”中,選擇“主輸出”,然後單擊“確定”。 將自動添加所有依賴項,如 dotnetfxredist_x86_enu.msm和dotnetcrystalreports.msm。需要將dotnetcrystalreports.msm排除在項目之外,在解決方案資源管理器中右擊這個模塊的右鍵,選擇“排除”。 在解決方案資源管理器中,右擊安裝項目,指向“添加”,然後單擊“合併模塊”。 在“添加模塊”對話框中,選擇下列要添加到安裝項目的合併模塊,然後單擊“打開”:
reportengine.msm, crnetruntime.msm, license.msm
mapping.msm (可選,當在報表中使用了geographic maps時)
VC_CRT.msm、VC_STL.msm( 如果您部署的 Windows 應用程序使用 ADO.NET 數據集,則還需要包括 VC_CRT 和 VC_STL 合併模塊)
在解決方案資源管理器中,右擊 license.msm 文件,然後選擇“屬性”。 在“屬性”窗口中,展開 MergeModuleProperties,然後在“許可證密鑰”屬性框中輸入一個有效的許可證密鑰。 注意 每當部署 Crystal Reports 應用程序時,必須提供許可證密鑰。從“生成”菜單中,選擇“生成解決方案”以生成應用程序。

(6)在 ASP.NET 程序中加載報表時,出錯:/Load Report Failed/
確保 ASPNET 本地用戶對報表所在的文件夾有“完全控制”的權限。

(7)部署 .NET 9.1 程序到 Windows 98 時,出錯:/Load Report Failed/
是因爲查詢引擎 DLL(CRQE.dll)在客戶計算機上沒有正確註冊。要解決這個問題,從開發計算機複製 Dbghelp.dll 到客戶計算機的/C:Windows/system32/ 文件夾。
在線支持:http://www.kpower.nease.net/main.html 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1518892

 
發佈了55 篇原創文章 · 獲贊 1 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章