報表中的子報表問題

2021-05-22 15:43:58 字數 2122 閱讀 5605

報表中的子報表問題 收藏

注:本文引自http://www.cnblogs.com/dlwang2002/archive/2006/12/07/585815.html隨心所欲的blog

subreport 是報表控制項中的乙個,可以在報表中巢狀另外乙個子報表。這裡討論的就是如何使用這個subreport。主要包括:如何填充資料(reportdatasource),如何向子報表傳遞引數(parameter)。

關於subreport的應用,有人已經作了論述(http://www.cnblogs.com/waxdoll/archive/2006/10/13/458409.html)。這個應用裡面已經解釋得比較詳細了,關於如何定義資料源,如何使用subreportprocessing事件等。我這裡作其他的論述(例子是從我的乙個報表模組裡面摘出的**)。從外部傳遞過去的東西也就是主要分為兩類:資料來源和引數。

1:關於資料傳遞

reportmanager.viewer.localreport.subreportprocessing += new microsoft.reporting.webforms.subreportprocessingeventhandler(localreport_subreportprocessing);

這是事件**,用於在子報表載入時向子報表提供資料來源(僅僅是資料來源,而不是引數。這個就是我所遇到的問題)

這是提供資料來源的函式

void localreport_subreportprocessing(object sender, microsoft.reporting.webforms.subreportprocessingeventargs e)

sender就是localreport物件,e是事件引數,可以向裡面傳遞資料

幾個要說明的問題

首先,主報表和子報表中定義的資料來源名稱可以一樣麼?事實上,可以。

為什麼會有這個問題呢?我上邊的應用是在乙個報表模組裡面的,主報表和子報表有相同的引數和資料來源(都是」dataset_table_1」)。所以,如果我向裡傳遞了兩個datatable,重名,並且reportdatasource也是重名,那麼報表可以區分這些資料麼?(當然,兩個報表資料來源裡面的欄位名也幾乎都是一樣)。經過測試,沒有問題。

也就是說,報表接受的兩個(或者多個)資料來源,會被送到不同地方的報表,互不干擾。

這個功能不錯,特別是對於我的這個報表模組

2:關於引數傳遞

然後,第二個問題,引數可以互不干擾的傳遞進去麼?答案是:不能。

很遺憾。

從void localreport_subreportprocessing裡面看,這裡接受到的引數只有兩個,乙個是localreport,乙個是e。在主報表載入的時候,我們可以這樣處理:

reportparameter param = new reportparameter[_fieldmaptable.count];

//map the column and paran

foreach (dictionaryentry de in _fieldmaptable)

try……

可以看到,我們在這裡向報表傳遞了引數param。這是乙個引數陣列。同樣的方法,我們能在localreport_subreportprocessing裡面應用麼?不能,因為這個時候,(sender as localreport)已經成了乙個唯讀的狀態((sender as localreport).setparameters(param);),無法傳遞任何引數。然後e呢?可惜的很,e.parameters也是唯讀的。

在程式裡面,我找不到方法向子報表傳遞引數。

其他地方倒還是有些辦法的,就在主報表中的subreport控制項的屬性裡面設定引數,通過主報表傳遞過去。

這個使用方法,「蠟人張」的文章裡面也有:在subreport上右鍵 / 屬性 /引數 /設定子報表的引數 = 主報表的引數(或者字段)名稱。需要注意的是:子報表中的引數名稱不能和主報表中的引數重名。這個正好和資料來源相反。

在我的應用裡面,沒個報表都有相同的引數設定,這下子,就有點麻煩了,需要調整一些實現。

後記:報表的頭(page header)和尾(page footer)中是不能繫結filed的,只能繫結parameter。如果parameter不能方便的傳遞,應用中就有小麻煩了。

事實這種情況倒是還不會出現,因為子報表基本不會再出現page header了。

子報表,內嵌報表 子報表

有時在報表某處需要顯示一些額外的資料,這些資料結構相對複雜,僅使用fastreport的欄可能無法達到效果,此時可能考慮在欄上使用子表報表 當插入子表報表後,fastreport會自動生成新的報表頁面,此頁面物件插入的子報表控制項。內嵌的子報表在結構上與多頁面報表相似,不同之處僅在於報表列印時並不像...

水晶報表 子報表

經過了一段時間對水晶報表的操作,我對其稍稍了解了一點點。這兩天,一直在為資料量太大而煩惱,我有六張表,其中一張關聯剩餘的五張表。想要顯示資料,結果,顯示不出來,即使我已經在鏈結裡面設定了左外連線。我知道這個是按照笛卡爾積相乘,所以資料會成倍的增加。所以,即使我改用直接連線資料庫的方式也行不通。就是p...

子報表與主報表的鏈結

我們平時使用的子報表與主報表,之間一般是沒有資料聯絡的 主要目的是將幾個不相干的資料表捏在一張報表上顯示 但是在實際的操作中,以下兩種情況子報表需要與主報表關聯 1 乙個普通的分組報表 主表和明細表兩表關聯的情況 如果只使用乙個主報表進行顯示 如果明細表中沒有資料,那麼主表中的資料因為關聯關係的原因...