2011-02-08 120 views
4

我有帶動態參數的水晶報表(例如,在某個數據庫的表COUNTRIES中鏈接)。 如何以編程方式獲取此參數(國家/地區列表)的允許值? 對於靜態我可以用得到的默認值:Crystal Reports動態參數值

 ReportDocument rd = new ReportDocument(); 
     rd.Load(reporthPath); 
     rd.ParameterFields; // contains params with default values collections 

動態參數在DefaultValues收集沒有任何項目。我可以檢索現有的報告連接,但我可以在哪裏獲得連接和動態參數之間的關係?

回答

2

在Crystal Reports中無法做到這一點。最好到而不是使用動態參數字段;他們使你的報告不必要的緩慢。而是將它們轉換爲靜態參數,並填充代碼中的默認值;這要快得多,你知道接受的值是什麼。

0

上面的答案是不正確的 - 從Crystal Reports XI(至少這是我的信息來自哪裏)是可能的;看到 http://devlibrary.businessobjects.com/BusinessObjectsXIR2/en/en/CrystalReports_dotNET_SDK/crsdk_net_doc/doc/crsdk_net_doc/html/crtsktutorialsrdparametersdiscrete.htm,特別是部分2(創建一個帶參數的報告)和5(創建顯示默認參數ListBox控件)

基本上可以從默認值列表可能採取的值的列表,

感謝,

MD-科技

+1

是的,我知道。要點是,這隻適用於手動輸入的默認值*靜態*參數字段。它不適用於* dynamic *參數字段,其中缺省值是從報表中的選定數據庫表中填充的。所以除非你可以用一個有效的代碼例子證明這一點,否則我會不同意你的意見。 – 2011-04-27 14:43:36

0

改進現有的答案有點跑這個問題後,地面自己:

一帶有靜態值列表的將這些值作爲其DefaultValues集合中的項目。問題是具有動態列表的ParameterField沒有預填充這些值,並且API似乎沒有查詢它們的機制。

解決方法是使用靜態列表而不是動態列表,但可能會有數百個可接受的值,這些值可能會隨時間而改變。除非記住改變報告是吸引人的,否則動態列表在這種情況下是有意義的。

此外,使用CrystalDecisions.ReportAppServer.DataDefModel.ParameterField顯示屬性BrowseFieldBrowseField有屬性TableAliasName,您可以使用ADO.NET進行查詢。但是,BrowseField僅爲靜態參數填充;在使用動態參數時它爲空。目前這被記錄爲SAP知識庫Article 2114469上的「需求修正」。

所以,一旦你以某種方式獲取表和列名,使用ADO.NET來查詢數據庫,並堅持這些價值觀到DefaultValues收集動態參數。考慮使用參數的命名約定來簡化操作。也許可以使用報表中未使用的靜態參數來存放表和列信息。