2009-01-16 55 views
1

我想知道我可以動態修改現有的Crystal Report (使用C#和Crystal Reports 2008),以便它可以使用相同的佈局報告根本不同的數據(來自同一數據庫)。原因是我們正在構建一個允許用戶指定的應用程序:如何使用Crystal Reports動態修改報告?

  1. 過濾器僅顯示他們感興趣的數據(即where條款)。
    • [例如,只顯示在紐約市建築]
  2. 指定哪些表顯示
    • [例如,顯示建築和地板,但不室]
  3. 指定顯示的字段
    • [例如,顯示建築ID,號碼,姓名,地址和樓層號]
  4. 更改一節的分組方式
    • [例如,通過建設使用,建立年級組,等]
  5. 更改的圖表中使用的字段
    • [例如,由建築物的使用,由建築物的使用佔用,由建築ID區域區域]由於用戶界面的靈活性也有許多不同種類的「問題」

用戶可以嘗試報告,我不想爲每種可能的組合創建一份報告。有關我正在嘗試完成的示例,請參閱下面的圖像。左側的報告描述了按地區分組的建築物。右側的報告描述了按網站分組的建築物。

Report Comparison http://img119.imageshack.us/img119/9052/performancereportcomparbt7.png

編輯:

我會嘗試使用報表參數由Philippe Grondier的建議修改的報告是。我通過壓制團體取得了成功。當一個組被壓制時,組向上滑動以填充空白區域,從而使所有內容排成一行而沒有空白。但是,單個文本對象的相同行爲並非如此。當文本對象被抑制時,該字段的輸出是空的空間。我想要做的就是壓制一個文本對象,這樣整行就會被壓制,這會導致它下面的所有條目「碰撞」一行。我怎樣才能做到這一點?

+0

我不確定我完全理解你的意思,但是你可以在特定的組/細節部分中包含文本字段,然後自動抑制空白/空白文本部分。 – 2009-01-21 05:44:46

+0

這是最適合我的解決方案。謝謝! – 2009-01-22 00:04:49

回答

3

根據更新的類型(以及更新所關注的對象),您可以使用免費的craxdrt.dll(設計器運行時庫)或非免費的craxddrt.dll(設計器設計和運行時庫)。我忘了細節,但你一定會在網上找到它們。

您的問題:

  1. 過濾器:有可能在運行時更新報表對象的SQLQueryString或更新預先聲明的參數,以便它們將被添加到「去哪兒」的條款。我認爲添加參數僅限於craxddrt dll,但可以使用craxdrt dll來更新現有的參數。您可以使用CR界面來更新這些參數,或者通過代碼來實現:一個想法是更新客戶端界面中的這些值(例如從活動窗體)並以編程方式更新它們。例如,請檢查here
  2. 隱藏表格:我不認爲'隱藏表格'是有意義的,因爲您需要您的表格才能使用所有關係來計算您的彙總值。因此,您可以向用戶建議查看/隱藏詳細信息或查看/隱藏不同分組級別的可能性。這可以通過免費的craxdrt庫和報告對象的「區域」收集/「壓制」方法輕鬆完成。
  3. 再一次,玩報告的不同領域似乎是這裏最好的解決方案
  4. 我建議你不要去考慮它!更改數據順序可能會導致不可預知的結果,特別是在計算組級中間摘要時。根據您的請求,您可以堅持提案(2),通過在報告中顯示不是特定的組,或者對於簡單的表單(僅限1個組),以編程方式更新運行時將用於組定義的參數式。
  5. 返回到建議(2):建立一個完整的報告將顯示所有預期的數據,然後隱藏/顯示報告的不同部分。

還有另一個可用的代碼示例here,向您展示如何在運行時將報告連接更改爲不同的數據庫/不同的表。

相關問題