水晶報表內功心法 信手拈來,掌控物件

2021-09-05 21:21:48 字數 3625 閱讀 8957

月初一如既往地忙碌,竟然一點時間也沒抽出來。

週末也是一如既往地加班了,好在事情進展地還算順利,終於有時間寫這一篇。

本來的計畫是《

掌控於股掌之間-**中傳引數、傳公式、操作水晶報表裡的所有物件》

考慮到公式的重要性,會單獨寫一篇,於是本篇的內容就是引數與物件的控制

而引數的部分,在本篇也是基本操作,後續的高階操作會結合其他環節進一步說明

1.物件的操作

開始之前

先說一下,操作物件,是依靠reportdocument,

基礎**如下:

c# code

reportdocument myreport 

=new

reportdocument();

string

reportpath ="

crystalreport1.rpt

"); myreport.load(reportpath);

//pull或push方式的資料處理

//...

crystalreportviewer1.reportsource

=myreport;

//然後,才是下文中的**

關於水晶報表裡的物件,我們直觀的來看一下。

在模板空白處點郵件,選「插入」,滑鼠放到「特殊字段」上,不要點,會出現如下選單。

操作的基本語法是:

c# code

myreport.reportdefinition.reportobjects[物件序號].方法或屬性; //或

myreport.reportdefinition.reportobjects[物件名稱].方法或屬性;

物件序號在 .net的水晶報表版本裡很難直觀的看出來,一般他是按加入報表的順序來排的

這個很難去記住。有時候為了一些需要,在遍歷的時候會用的到。

一般我們會用

名稱。

在物件上點右鍵,設定物件格式,

對於reportobject來說,通用的屬性有這樣一些

這裡說一下水晶報表的座標系和計量單位。

水晶報表的座標系,以每個節的左上角為原點,往下往右兩個方向遞增延展。

計量單位是緹,與厘公尺的換算關係是:1厘公尺=567緹

所以在後面的**中,你會看到我有這樣的寫法: 567*n 其實也就是n厘公尺。

另外還有

objectformat下面的屬性,可以控制物件的隱藏與顯示,這個很實用吧,呵呵。

c# code

myreport.reportdefinition.reportobjects(

"text4

").objectformat.enablesuppress

=true;

reportobject是個通用物件,而其實際上又是乙個具體的物件。他有各自的特殊屬性。

以文字框為例,他就會多出一些特性,比如text屬性,這樣我們可以修改到文字框的內容。

c# code

//

更改乙個文字框的內容

textobject x; x

=(textobject)myreport.reportdefinition.reportobjects[

"text4

"]; x.text ="

我們的世界";

另外說一下,前面沒提到的

資料字段,也可以這樣操作。

c# code

//

調整欄位的位置

fieldobject fo; fo

=(fieldobject)myreport.reportdefinition.reportobjects[

"name1

"]; fo.height

=567*3

; fo.width

=567*4

; fo.left

=567*1

;

每個物件都有各自不同的屬性,至於具體有多少物件,你可以按一下f2, 在

crystaldecisions.crystalreports.engine這個命名空間下,以

object結尾的,基本都是。

2:子報表裡物件的操作

子報表裡的物件操作跟主報表是一樣的,主要是要先找到這個子報表物件。

下面這個方法是不對的

c# code

subreportobject subobj; subobj 

=(subreportobject)myreport.reportdefinition.reportobjects[

"subreport1"];

這個只會定義子報表在主報表內的特性,不能設定到子報表內的部件

要這樣

c# code

myreport.subreports[子報表序號].reportdefinition.reportobjects["xx

"];

//序號從0開始計數,單純子報表的乙個序號 //或

myreport.subreports[子報表名稱].reportdefinition.reportobjects["xx

"];

注意這個名稱不是我們在子報表上點右鍵看到的名稱,而是我們在設計子報表時指定的子報表名稱

textobject subtext; subtext 

=(textobject)myreport.subreports[

"xyz

"].reportdefinition.reportobjects[

"text3

"]; subtext.text ="

我是子報表裡的內容哦";

3:引數的基本操作

引數是程式與報表互動的乙個重要媒介,本節只做乙個基礎說明,後續的章節中會進一步介紹。

新建乙個引數p1

setparametervalue 後面的幾個引數依次為:引數名稱,引數值,子報表名稱(如果是子報表引數的話)。

c# code

myreport.setparametervalue(

"pa1",

"我是乙個引數");

在子報表中建立乙個新的引數spa1,注意xyz是子報表名稱

c# code

myreport.setparametervalue(

"spa1",

"我是乙個引數",

"xyz");

當然,引數也可以傳遞給crystalreportviewer,這裡就不展開說了,用到的時候再說。

單純從這個**上來看,textbox和引數似乎可以等價

但是textbox一般只能用於顯示乙個字串,但是引數則可以參與公式,過濾資料,控制物件的一些特性等等,用途更廣泛一些。

好了,就到這裡。這個基本上沒有什麼需要特別注意的。

修正記錄:

20090707:

座標系原點應該是每個節的左上角,而不是整個模板的左上角

水晶報表內功心法 信手拈來,掌控物件

月初一如既往地忙碌,竟然一點時間也沒抽出來。週末也是一如既往地加班了,好在事情進展地還算順利,終於有時間寫這一篇。本來的計畫是 掌控於股掌之間 中傳引數 傳公式 操作水晶報表裡的所有物件 考慮到公式的重要性,會單獨寫一篇,於是本篇的內容就是引數與物件的控制 而引數的部分,在本篇也是基本操作,後續的高...

水晶報表內功心法 序言

最近的一年多,因為生活比較平穩,我開始恢復我在部落格 論壇和郵件的答疑。回答問題,本身也是個開拓眼界和成長的過程。有時候回答乙個問題,需要幾天時間,去構造資料,模擬環境,和測試 但是累積下來,我發現很多問題是重複的,大部分人開始都會遇到的。而且我注意到個情況,就是有些文章,存在典型的誤導。並不說一定...

水晶報表內功心法 推拉之間

水晶報表動態表擴充套件 之 任意無關聯表,任意列,任意資料來源 水晶報表動態表擴充套件 之 任意sql及任意有關聯表,任意列 及其他 好了,總結一下 1 cs模式或小型系統,建議用pull模式,大型bs系統,建議用push模式。但這不是絕對的,可以根據實際情況混用。如果是大資料量的清單類的報表,建議...