2010年7月19日 星期一

水晶報表編程及問題總結

水晶報表編程及問題總結
1.怎麼讓組頁眉,在同一組中每一頁都顯示

插入組的時候,在公用選項頁面選中「在每個頁面上重複組頁眉」

2.如何向 CrystalReportViewer 和 ReportDocument 傳遞參數……

一、CrystalReportViewer
通過 CrystalReportViewer.ParameterFieldInfo 屬性……
1、crystalreportviewer 成員
公共實例屬性
ParameterFieldInfo(從 CrystalReportViewerbase 繼承) ParameterFields。獲取或設置參數字段集合。

二、reportdocument
通過 ReportDocument.DataDefinition.ParameterFields 屬性……
1、reportdocument 成員
公共實例屬性
DataDefinition DataDefinition。獲取 DataDefinition 對象。
2、datadefinition 成員
公共實例屬性
ParameterFields ParameterFieldDefinitions。獲取 ParameterFieldDefinitions 集合。

三、參數字段運行時自定義(crystalreportviewer)
參考:
設置參數 | Windows 窗體查看器的綁定選項 | Web 窗體查看器的綁定選項
可支持用戶在 Crystal 報表中通過參數進行輸入。這種參數有多種用途。例如:
使參數基於數據庫字段並允許用戶指定該字段的值,以便對報表中的數據進行篩選。
使用參數字段將條件格式應用於報表。
使用參數字段來定義排序順序。
下列示例說明如何在運行時通過代碼設置參數字段值。此例解釋了如何設置兩個不同的參數:第一個是多值離散參數,第二個是區域值參數。

在運行時修改參數字段

[c#]
// 聲明將參數傳遞給
//查看器控件所需的變量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue rangeVal = new ParameterRangeValue ();

// 第一個參數是具有多個值的離散參數。

// 設置參數字段的名稱,它必須
//和報表中的參數相符。
paramField.ParameterFieldName = "客戶姓名";

// 設置第一個離散值並將其傳遞給該參數。
discreteVal.Value = "AIC Childrens";
paramField.CurrentValues.Add (discreteVal);

// 設置第二個離散值並將其傳遞給該參數。
// discreteVal 變量被設置為新值,這樣,以前的設置
//就不會被覆蓋。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = "Aruba Sport";
paramField.CurrentValues.Add (discreteVal);

// 將該參數添加到參數字段集合。
paramFields.Add (paramField);

// 第二個參數為區域值。paramField 變量
//被設置為新值,這樣,以前的設置就不會被覆蓋。
paramField = new ParameterField ();

// 設置參數字段的名稱,它必須
//和報表中的參數相符。
paramField.ParameterFieldName = "客戶 ID";

// 設置範圍的開始值和結束值並將該範圍傳遞給
//該參數。
rangeVal.StartValue = 42;
rangeVal.EndValue = 72;
paramField.CurrentValues.Add (rangeVal);

// 將第二個參數添加到參數字段集合。
paramFields.Add (paramField);

// 將參數字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields;

更多資料請查看:http://www.devedu.com/develop/2005-4-8/12305/default.aspx

3.設置Crystal Report Viewer 的外觀

設置 Crystal Report Viewer 的屬性:
BestFitPage 布爾值。獲取或設置頁面視圖是大小合適還是用滾動條進行裁剪。
這個地方設為false後,設置Crystal Report Viewer 的寬度就可以去除滾動條了。
說明 :目前有兩種情況,其中在從 Web 窗體查看器進行打印時會出現問題:
BestFitPage屬性為默認值「真」(即,沒有垂直或水平滾動條),但PageZoomFactor大於 100。
BestFitPage 設置為「假」,Web 窗體查看器的高度小於報表頁的高度(即,有垂直滾動條),而查看器的寬度大於或等於報表頁的寬度(即,沒有水平滾動條)。
配合設置 Width、Height 來實現無空白和無滾動條的顯示!
DisplayGroupTree 布爾值。獲取或設置樹視圖是可見還是隱藏。
DisplayPage 布爾值。獲取或設置工具欄是可見還是隱藏。
DisplayToolbar 布爾值。獲取或設置工具欄上的轉到頁按鈕是可見還是隱藏。
PageZoomFactor Int32。獲取或設置報表的縮放因數。
SeparatePages 布爾值。獲取或設置報表頁是分開還是連接。
PageToTreeRatio Float64。設置組樹與報表視圖之間的大小比例。

4.控制工具欄的按鈕:

設置 Crystal Report Viewer 的屬性:
HasGotoPageButton 布爾值。獲取或設置轉到頁按鈕的可見性。
HasLevelUpButton 布爾值。獲取或設置工具欄上的轉到上一頁按鈕是可見還是隱藏。
HasPageNavigationButtons 布爾值。獲取或設置工具欄上的頁面導航按鈕是可見還是隱藏。
HasRefreshButton 布爾值。獲取或設置工具欄上的刷新按鈕是可見還是隱藏。
HasSearchButton 布爾值。獲取或設置工具欄上的搜索按鈕是可見還是隱藏。
HasZoomFactorList 布爾值。獲取或設置工具欄上的縮放因數列表是可見還是隱藏。

5.在 Web 頁面裡的佈局:

在「設計視圖」,修改 CrystalReportViewer 的 Width、Height 屬性。
切換到窗體的「HTML 視圖」,修改 style 屬性。
<CR:CrystalReportViewer id="CrystalReportViewer1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" Width="350px" Height="50px" EnableDrillDown="False" DisplayGroupTree="False"></CR:CrystalReportViewer>

6.除水晶報表的的公司LOGO

將 Crystal 公司的Logo 文件替換或刪除……
(1)如果是用 VS.NET 裡自帶的水晶報表
C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images\ToolBar\logo.gif
(2)如果是用水晶報表 9.2
C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images\toolbar\crlogo.gif

7.替換水晶報表裡的各種圖標和圖片

(1)如果是用 VS.NET 裡自帶的水晶報表
C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images
(2)如果是用水晶報表 9.2
C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images

8.關於打印的時候安裝插件:

在 Crystal Reports 的更新版本中,您可以使用新的 CrystalReportViewer.PrintMode 屬性來指定打印模式。其中包含兩個選擇項:ActiveX 和 PDF。
當屬性設置為PrintMode.PDF 時,報表會在WEB服務器上導出為PDF,然後以數據流傳送到瀏覽器,使用者可以利用選項,直接打印到打印機。這個選項是跨平台相容的。

當屬性設置為PrintMode.ActiveX時,ActiveX 打印控制項允許使用者將報表直接打印到本地打印機

先下載 http://support.businessobjects.com/CRforVS2005/PrintControl.cab,放到自已的服務器上。
若要在 Crystal Reports for Visual Studio 2005 網站顯示 cab 包,需將下列 xml 語句加入網站的 web.config 文件(必須加到<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">之後,也就是最前面):
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="printControl" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<printControl>
<add key="url" value="http://192.168.88.91/PrintControl.cab"/> --這裡改為.CAB包所在地址
</printControl>
</crystalReports>
</businessObjects>

注意:只有 Internet Explorer 才會支持 ActiveX 模式。若從非 Internet Explorer 的瀏覽器 (FireFox、Safari、Mozilla 等) 打印,將會恢復到 PDF 彈出對話框。

然後在打印的頁面或直接在主窗體添加一個層,並在層中添加如下代碼(可以採用其他方式)
<object id="CrystalPrintControl" classid="CLSID:BAEE131D-290A-4541-A50A-8936F159563A"
codebase="http://192.168.88.91/printcontrol.cab" height="0px" version="10,2,0,1078"
viewastext="" width="0px">
</object>
version是版本號,如果你是其他的版本將版本號修改一下即可。

9.已達到系統管理員配置的最大報表處理作業數限制的處理

解決辦法:
具體為修改下面兩個鍵的值。
HKEY_LOCAL_MACHINE; SOFTWARE; Crystal Decisions; 10.0; Report Application
Server; InprocServer; PrintJobLimit 修改為1000
還有一個HKEY_LOCAL_MACHINE; SOFTWARE; Crystal Decisions; 10.0; Report Application
Server; Server; PrintJobLimit 也修改為1000

我發現在C:\WINDOWS\Temp這個臨時文件裡面有大量的水晶報表文件,每使用一次就會生成幾個文件,在電腦沒有重新啟動的情況下它不會被刪除,而出現大量的無用文件,在google裡面搜了一圈發現也有人碰到這樣的情況但回答的很模糊只是說要將水晶報表裝載的文檔關閉掉,從這裡可以看出出現這樣的錯誤應該是程序員人為照成的.
具體解決如下:
1.ReportDocumen實例必須為類成員

private ReportDocument prtp = new ReportDocument();

2.使用完水晶報表必須關閉文件,這樣子就不會在windows的臨時文件裡面產生.
private void Page_Unload(object sender, EventArgs e)
{
prtp.Dispose();
}
Page_Unload 事件是在頁面完全顯示的時候運行,這樣子就解決了.

沒有留言:

張貼留言