2010-02-04 43 views
2

我有一堆水晶報告,其中包含大量參數化字段,這些字段由代碼填充並通過CRViewer顯示。我需要在這裏添加幾個部分來執行查詢以返回數據集並將其顯示在同一報告中。我不確定是否最好的方式與子報表。我正在嘗試添加一個子報表,然後將子報表的數據源設置爲我的數據集,但我無法使其工作。查詢插入到主報告中的子報表

這是甚至正確的方式,或者我只是做錯了什麼?

任何幫助,將不勝感激。

編輯:

我正在尋找的例子。

可以說有客戶表。我將FirstName LastName作爲參數化字段顯示在表單上,​​並附帶地址和基本客戶信息。

我想放置一個子報表,顯示此客戶在同一個報表上的所有訂單。這是一個可能有多個訂單的關聯表。

該報告被放置在一個可以被VB.NET應用程序調用的類中。因此我無法在UI中爲子報表創建數據連接(或者我可以並在以後傳遞參數)。

我成功地通過執行以下操作填充參數字段:

Dim myRpt As New RunReport.RunReport 

myRpt.Load("myReport.rpt") 

'Set Labels 
myRpt.SetParameterValue("@FirstName", strFirstName) 

CrystalReportViewer1.ReportSource = myRpt 

一個的customerID將可以及如果需要,該協會的行上進行綁定。

這將是一個報告,我只需要顯示子報表部分來處理所有可能的訂單。這是我遇到問題的部分。

+0

在我的CR報告中,我經常做幾個小節,並在其中的每個子報表。當你需要在同一報告中顯示多個不同的數據集時,這是我所知道的最好的方法。你能給我們更多的細節嗎?出了什麼問題? – PowerUser 2010-02-05 13:45:46

+0

只是尋找一些指導或說明,我已經搜索並看到使用嚮導創建子報表的例子。我將通過數據集傳遞數據。所以我正在尋找我需要做些什麼來以某種方式將這個數據集傳遞給子報表。當我嘗試設置子報表的數據源屬性時,它會拋出一條消息,指出:「該報表沒有表格」 – Matt 2010-02-05 14:44:02

+0

我幾乎不知所措,然後一個燈泡響了起來。您是否試圖獨立於主報告製作子報表? 試試這個: 在主報表的設計菜單,轉到插入 - >報表中,選擇您的數據表,並把這些字段的一個或兩個子報表的可見部分(如佔位符)。不要忘記將主要報告中必要的參數傳遞給子報表。然後轉到預覽。祝你好運。 – PowerUser 2010-02-05 20:56:39

回答

1

你是否像這樣設置主報表的數據源?

Dim ds as new Dataset 
sqlAdapter.Fill(ds, "Whatever"); 
oRpt.SetDataSource (ds) 

如果是這樣,將其設置子報表上可能是這樣的:

Dim oSubReport As ReportDocument 
For Each oReportObject As SubreportObject In oRpt.ReportDefinition.ReportObjects 
    If oReportObject.Kind = ReportObjectKind.SubreportObject Then 
    oSubReportObject = CType(oReportObject, SubreportObject) 
    oSubReport = oRpt.OpenSubreport(oSubReportObject.SubreportName) 
    oSubReport.SetDataSource (ds) 
    End If 
Next 

我讀過你上面的更新,並想我明白你要什麼。看看這是否適合你:

1)創建主報告。 Give是您想要的任何選擇標準(例如CustName或CustID)
2)創建子報告。給它一個你想要的選擇選擇標準(例如CustID)
3)將子報表插入主報表後,右鍵單擊設計器中的子報表對象/框並選擇「更改子報表鏈接」
4 )在「鏈接到的字段」框中,從主報表中選擇將驅動子報表的值。 (出客戶ID)
5)在「子報表參數字段使用」下拉列表中,選擇您要鏈接到主報表中的子報表參數字段(出客戶ID)

當您運行報告中,子報表只應顯示主報表中顯示的記錄的數據。

如果這些步驟沒有找到您要查找的內容,請描述缺少哪些功能。

P.S .:如果你只是想拉數據一次(而不是一次爲主,再次爲子),我的問題是:爲什麼?

+0

嘿,你帶我到正確的答案。我插入了子報表並從我創建的數據集中放置了字段。然後,我將代碼中的數據集綁定到報告中創建的數據表。它現在正在按照要求工作。謝謝您的幫助。 – Matt 2010-02-10 13:03:59

+0

很高興:) – bluecoder 2010-02-10 15:07:32

0

您將需要創建2個數據集並將它們作爲參數傳遞給它們。 1將包含基本的客戶信息及其關鍵。另一個將包含第一個數據集中所有客戶的訂單以及相應的客戶密鑰。從那裏,你將把主要報告綁定到第一個數據集。您的子報告將綁定到第二個數據集。然後,您將使用父報告中的客戶密鑰作爲子報告的參數,並按該參數進行過濾。這將限制子報表僅顯示該客戶密鑰的訂單。這一切都可以在報告中很少或沒有代碼的情況下完成。所有代碼都在調用報告的.Net對象中完成。

這是一個很棒的網站,如果你還沒有看到它,它會讓你開始。它幫了我很多:http://www.emoreau.com/Entries/Articles/2006/09/Feeding-Crystal-Reports-from-your-application.aspx

1

我希望我能正確理解這一點。

基本上我認爲您正在嘗試創建一個發票報告,其中標題顯示了客戶信息,詳細信息顯示了發票的詳細信息。如果是這樣的話,那麼我想,以適應這種最簡單的方式是通過簡單地將客戶字段包含發票類似下面的細節數據集:

數據

Name   Address  City State InvSeq Item Amt 
Peter Griffin 36 Spooner St Quahog RI  1  Item1 40.00 
Peter Griffin 36 Spooner St Quahog RI  2  Item2 30.00 
Peter Griffin 36 Spooner St Quahog RI  3  Item3 20.00 
Peter Griffin 36 Spooner St Quahog RI  4  Item4 10.00 

然後你只需添加將客戶信息字段添加到報告標題(如果此報告針對多個客戶,則爲客戶組標題標題),以便第一條記錄中的數據是客戶信息中唯一顯示的數據。然後添加發票明細字段細節部分,使他們重複進行如下的每一行:

報表佈局

*RH*:  Sold To: 
      Peter Griffin 
      36 Spooner St 
      Quahog, RI 

*Details*: InvSeq Item  Amt. 
       1  Item1 $40.00 
       2  Item2 $30.00 
       3  Item3 $20.00 
       4  Item4 $10.00 

希望我正確認識這個問題,如果是的話,我希望這會有所幫助。

+0

家庭人+1 – dotjoe 2010-02-11 21:07:36

相關問題