月初一如既往地忙碌,竟然一點時間也沒抽出來。
週末也是一如既往地加班了,好在事情進展地還算順利,終於有時間寫這一篇。
本來的計畫是《
掌控於股掌之間-**中傳引數、傳公式、操作水晶報表裡的所有物件》
考慮到公式的重要性,會單獨寫一篇,於是本篇的內容就是引數與物件的控制
而引數的部分,在本篇也是基本操作,後續的高階操作會結合其他環節進一步說明
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模式。但這不是絕對的,可以根據實際情況混用。如果是大資料量的清單類的報表,建議...