水晶報表基礎操作技巧

來源:互聯網
上載者:User
水晶報表
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 DataSet 設計工具中。
(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 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.