使用RAS SDK 動態新增子報表

2021-05-07 08:09:23 字數 3345 閱讀 6834

之前有人問到怎麼在**中動態新增子報表,或者其他物件。我的答覆一般是這個是做不到的,但是可以通過預置物件的顯示與隱藏來模擬此效果。

這是因為現在大多數朋友用的都是微軟vs200x自帶的水晶報表,這個版本是個簡化版本,所以有很多東西是實現不了的。

前幾天有人問到了 bo xi 的問題,我也很高興終於能在這個層面上做一些討論。後面如果有必要,我會寫一些boe sdk層面的程式設計。

這個前提是,開發機器上需要安裝了bo或crystalreports server(或其客戶端、 sdk)

然後我們就可以使用ras sdk在動態新增物件了。

當然也可以使用水晶報表開發版的rdc來實現這個功能,但是**上還是有不少差別的。

關於ras我在這裡做過一些說明

也可參考msdn

本文的**用以演示乙個簡單的子報表動態新增。

新建立乙個水晶報表winform工程(vb.net),缺省會增加乙個報表crystalreport1.rpt,再增加乙個forsub1.rpt

因本**只演示子報表的動態新增,所以兩個報表裡都只放了些文字,均未鏈結資料庫

imports

crystaldecisions.shared

imports

crystaldecisions.windows.forms

imports

crystaldecisions.crystalreports.engine

imports

imports

public

class

form1

private

subform1_load(

byval

sender 

asobject

, byval

e as

system.eventargs) 

handles

me.load

dimboreportdocument 

asreportdocument

dimboreportclientdocument 

asiscdreportclientdocument

dimbosubreportclientdocument 

asdim

boarea 

asdim

bosection 

asdim

strsubrptfile 

asstring

boreportdocument 

=new

reportdocument()

'載入主報表

boreportdocument.load(

"e:/crquestions/addsubreportruntime/crystalreport1.rpt")

'----------------------------------------

'如果要進行資料、引數、公式操作,請在此處對主報表boreportdocument進行操作

'----------------------------------------

boreportclientdocument 

=new

reportclientdocumentclass()

'由主報表返回待ras操作的reportclientdocument

boreportclientdocument 

=boreportdocument.reportclientdocument

'設定待處理的報表區域(此處使用了報表頁首)

boarea 

=boreportclientdocument.reportdefcontroller.reportdefinition.reportheaderarea

'建立乙個新的section,用來放置子報表

bosection 

=new

'設定新節的名稱

bosection.kind ==

"reportheaderforsub1"'

設定節物件寬度。注意1cm=567緹,可自行調整,此處為20cm

bosection.width 

=567*20

'待載入的子報表

strsubrptfile ="

e:/crquestions/addsubreportruntime/forsub1.rpt"'

將section加到reportclientdocument

boreportclientdocument.reportdefcontroller.reportsectioncontroller.add(bosection, boarea, -1

)'匯入子報表,ss1是子報表物件在主報表上的名稱

bosubreportclientdocument 

=boreportclientdocument.subreportcontroller.importsubreport(

"ss1

", strsubrptfile, bosection)

'----------------------------------------

'如果要進行資料、引數、公式操作,請在此處對子報表bosubreportclientdocument 進行操作

'----------------------------------------

'重新整理viewer

crystalreportviewer1.reportsource 

=boreportdocument

end sub

end class

c#版本(winform):

using

system;

using

system.windows.forms;

using

crystaldecisions.shared;

using

crystaldecisions.windows.forms;

using

crystaldecisions.crystalreports.engine;

using

using

namespace

public

partial

class

form1 : form

private

void

form1_load(

object

sender, eventargs e)}}

Grid Report 報表動態使用

1.使用報表設計器新增你要的記錄集和標題行 內容行等內容 2.載入時 gri report subreport new gri report 建立個報表物件 3.建立個構造類 private struct matchfieldpairtype 4.載入報表檔案並新增個fetchrecord 事件 s...

水晶報表中動態新增字段

水晶報表中,因為資料來源的字段是不固定的,可否在執行時動態新增字段,就象在winform中動態新增控制項一樣?更新 2003 11 05 解決方案 用 公式字段 1 根據欄位的最大數量,定義若干個 公式字段 formulafeild1 formulafeild2 公式為空 2 把 公式字段 按順序放...

如何在水晶報表中動態新增字段

問題 水晶報表中,因為資料來源的字段是不固定的,可否在執行時動態新增字段,就象在winform中動態新增控制項一樣?更新 2003 11 05 解決方案 用 公式字段 1 根據欄位的最大數量,定義若干個 公式字段 formulafeild1 formulafeild2 公式為空 2 把 公式字段 按...