




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
RDLC使用總結(jié)
1、為何要使用RDLC報(bào)表(簡(jiǎn)介)
VS.NET開發(fā)中,用什么進(jìn)行報(bào)表設(shè)計(jì)?也許日勺回答是CrystalReport>當(dāng)然,必須承認(rèn)
CrystalReport日勺功能還是非常強(qiáng)大日勺?被BusinessObject收購(gòu)后來(lái)5商業(yè)的;成分也在逐漸增
長(zhǎng),也形成了一定規(guī)模日勺顧客群。
VisualStudio.NET進(jìn)入2023版本后來(lái)?CrystalReport與IDE結(jié)合更“緊密”了?至少
我們看不到那個(gè)討厭日勺注冊(cè)窗口了。不過(guò),Microsoft似乎并不容忍在自己H勺超級(jí)工具中居然
沒有報(bào)表工具,于是ReportViewerControl出現(xiàn)了,我把它B勺報(bào)表稱為RDLC報(bào)表。
在VS.NET2023之前,SQLServerReportingServices中已經(jīng)提供了一種被稱為報(bào)表定義語(yǔ)
言(ReportDefinitionLanguage,RDL)的語(yǔ)言;在VS.NET2023中,Microsoft提供了針對(duì)這
種報(bào)表日勺設(shè)計(jì)器,并提供了在WinForm和WebForm中使用這種報(bào)表的能力。Microsofl將這
種報(bào)表日勺后綴定為RDLC,RDL仍然是ReportDefinitionLanguage日勺縮寫,那么C代表什么
呢?C代表Client-sideprocessing,凸顯了它的)客戶端處理能力。
這種報(bào)表日勺易用性和可定制性讓我們完全有理由放棄CrystalReport,讓我們來(lái)看看它日勺強(qiáng)
大功能吧:
1)簡(jiǎn)樸易用的控件,尤其是Table控件,非常以便字段在報(bào)表上H勺排列;
2)靈活的可定制性,用XML來(lái)描述一種報(bào)表有關(guān)的)一切,不用說(shuō)了吧;
3)高度可編程性,在你日勺項(xiàng)目中,甚至不需要有一種報(bào)表文獻(xiàn),通過(guò)代碼就可以實(shí)現(xiàn)報(bào)
表生成、預(yù)覽和打印等一系列操作;
4)支持DrillThrough數(shù)據(jù)鉆取功能;
5)導(dǎo)出H勺Excel文獻(xiàn)格式非常完美,并且并不需要安裝Excel;
6)數(shù)據(jù)源處理極其以便,開發(fā)人員可以自己接管數(shù)據(jù)庫(kù)連接、取數(shù),然后將數(shù)據(jù)成果賦
值給RDLC日勺數(shù)據(jù)集即可。
7)展示和數(shù)據(jù)分離,程序員更是可以編寫一種RDLC設(shè)計(jì)器交有顧客使用,這樣顧客
就可以自行設(shè)計(jì)RDLC報(bào)表格式,程序員只負(fù)責(zé)定制數(shù)據(jù)按口即可。
RDLCMSDN:(VS.80).aspx
2、RDLC簡(jiǎn)樸Demo
本文所有RDLC例子都是基于VS2005C#,所有ReportViewer日勺處理模式都是Local模式。
本報(bào)表Demo顯示上文中提到的RDLC手冊(cè)各節(jié)內(nèi)容,下述為DemoH勺詳細(xì)steps。
1)新建項(xiàng)目,選擇Windows應(yīng)用程序項(xiàng)目類型,輸入工程名稱RDLCDcv;
2)修改Form1窗體名稱為FrmRdlcUserGuide?在工具箱一>數(shù)據(jù)Tab選項(xiàng)卡中選擇
ReportViewer控件,將其拖入到FrmRdlcUserGuide?默認(rèn)命名為reportViewer1?調(diào)整
R印ortViewer控件H勺大小和布局;
3)在處理方案資源管理器中選擇RDLCDev工程,鼠標(biāo)右擊RDLCDev工程,添加新建
項(xiàng),在添加新項(xiàng)模板中選擇“報(bào)表”,取名為rdlcuserguide.rdlc>單擊添加按鈕,然后在處理
方案資源管理器中RDLCDev工程下會(huì)增長(zhǎng)一種rdlcuderguide.rdlc文獻(xiàn),并且會(huì)自動(dòng)打開RDLC
設(shè)計(jì)器;
4)在RDLC設(shè)計(jì)器中添加11個(gè)TextBox控件,1個(gè)作為標(biāo)題,其他10個(gè)作為RDLC
使用手冊(cè)詳細(xì)內(nèi)容,對(duì)每個(gè)TextBox控件進(jìn)行TextAlign、Color'BorderStyle、Font和
TextDecoration等有關(guān)屬性設(shè)置,設(shè)計(jì)完畢之后5大體如下圖所示。
RDLC使用手冊(cè)
;::1)為什么要使用RDLC報(bào):二二二:6)RDLC鉆雙功能實(shí)現(xiàn);二二二
:::::2)RDLC簡(jiǎn)單Demo::::::::::7)RDLC子報(bào)表介紹;::::::
:::=3)RDLC現(xiàn)范簡(jiǎn)介;:::::::::8)RDLC自定義工具條;
::二:4)RDLC常用控件介紹;:二:二二:9)RDLC自定義打印實(shí)現(xiàn);:二:二
二二:5)RDLC參數(shù)介紹;二::二二:1C0RDLC設(shè)計(jì)器實(shí)現(xiàn);
5)在FrmRdlcUserGuide窗體Load5件中添加下述代碼
privatevoidFormlLoad(objectsender,Event.Argse)
(
this.reportViewer1.ProcessingMode=Microsoft.Reporting.WinForms.ProcessingMode.Local;
this.rcportVicwcrl.LocalReport.RcportPath='rdlcuscrguidc.rdlc”;
this,reportViewer1.RefreshReport();
6)編譯、運(yùn)行RDLCDev工程,運(yùn)行成果大體如下圖所示。
FrBRdlcUserGuide
*?
*?1/1,■?」a3□4J100%▼
RDLC使用手冊(cè)
1)為什么要使用EDIT報(bào)表;6)RDLC鉆取功能實(shí)現(xiàn);
2)RDLC簡(jiǎn)單Demo;7)RDLC子報(bào)表介紹;
3)RDLC規(guī)范簡(jiǎn)介;8)RDLC自定義工具條;
4)RDLC常用控件介紹;9)RDLC自定義打印實(shí)現(xiàn);
5)RDLC參數(shù)介紹;10)RDLC設(shè)計(jì)器實(shí)現(xiàn);
3、RDLC常用控件簡(jiǎn)介
RDLC設(shè)計(jì)工具箱上總共有9種控件:文本框(TcxtBox)、折線(Line)、表(Table)、矩陣(Matrix)、
矩形(Rectangle)、列表(List)、子報(bào)表(SubReport)、圖表控件(Chart)、圖像控件(Image)。下圖
ctlsDemo.rdlc設(shè)計(jì)器所示為所有控件日勺設(shè)計(jì)演示。
圖像控件
RDLC控件演示(文本框)
折線
ProdCatSubCatOrderOrderSales
^FieldsIProdCat.Va=FieldslSubCat.Value=FieldslC=FieldsK=CDbl(Fields!Sales.Value)
=Sum(CDbl(Fields!Sales.Vai-
矩陣控件=Fields!OrderYe
.一表格控件.??
=Fields!OrderQU一>矩陣控件
=Fields!ProdCat=FieldsISubCat.Value=Sum(CDbl(Field
刁P列表控件:::::::
■[=Fields!ProdS三」:二:圖表控件二二:
s
s
q80
e40
s
A
1)由于表格控件、矩陣控件、列表控件和圖表控件必須填充數(shù)據(jù)集,因此把所有控件布
局完畢之后,創(chuàng)立一種數(shù)據(jù)集。處理方案資源管理器中'選中RDLCDev工程,右擊添加新建
項(xiàng),在新建項(xiàng)類型模板里選擇“數(shù)據(jù)集”,取名“ctlsDemo.xsd”,單擊“添加”。
ctlsDcmo.xsd添加完畢之后,在處理方案資源管理器中會(huì)增長(zhǎng)一種ctlsDcmo.xsd文獻(xiàn),并
前VSIDE會(huì)自動(dòng)打開ctlsDemo.xsd設(shè)計(jì)頁(yè)面。在設(shè)計(jì)頁(yè)面中右擊,添加Datatable?將其命名
為vSales,該表描述的是產(chǎn)品的銷售額信息,為vSales表添加列,列信息如下:
ProdCatSystem.String
SubCaiSystem.String
OrderYearSystem.Int32
OrderQtrSystem.String
SalesSystem.Double
2)文本框控件、折線控件、矩形控件使用相對(duì)簡(jiǎn)樸,這里不細(xì)說(shuō);
3)Image控件,目前RDLC設(shè)計(jì)器模式下,選擇“報(bào)表”菜單,“嵌入圖像”,在“嵌
人圖像”對(duì)話框中,載入一種當(dāng)?shù)貓D像文獻(xiàn)即可。然后設(shè)置Image控件的]Source屬性為
Embedded,設(shè)置Value屬性為剛剛處理的嵌入圖像即可。當(dāng)然尚有別H勺方式可以顯示圖像,
大家可以Google一下,關(guān)鍵字為RDLC、嵌入圖像;
4)圖表控件,使用圖表控件的一種關(guān)鍵是要設(shè)置好圖表屬性頁(yè)面中日勺數(shù)據(jù)TAB頁(yè)有關(guān)
內(nèi)容。重要有值、類別組和序列組定義,大家可以參照Demo;
5)表格控件、矩陣控件和子報(bào)表控件,在后續(xù)內(nèi)容中會(huì)詳細(xì)簡(jiǎn)介;
4.1表格控件使用簡(jiǎn)介
1)Table控件是RDLC報(bào)表顯示數(shù)據(jù)的一種關(guān)鍵控件,有關(guān)Table控件,在微軟提供日勺
RDLC規(guī)范里有詳細(xì)的簡(jiǎn)介,其大體內(nèi)容可以用下述日勺一張類UML圖來(lái)表達(dá);
Table
TableGroupingTable
ColumnGroup
Wdt卜Visibility
VisibilitySorting0-
Hoador
<5RepeatOnNewPage'>
△
DetailsTableRowTableCell
(Visibility—<HeghlWColSpar
Visbility
▽
Sorting
Reportitem
Footer
■:RepeatOnNewPage(下
Figure4-Table
2)新建報(bào)表文獻(xiàn),命名為ctlTableDemo.rdlc;
3)在ctlTableDemo.rdlc設(shè)計(jì)器中,拖入Tabic控件,默認(rèn)狀況下是3行3列,其中第1
行為表頭行(我們理解為列標(biāo)題行),第二行為詳細(xì)信息行(我們理解為報(bào)表內(nèi)容展示區(qū)域),
第三行為表尾行(我們理解為匯總區(qū)域)??梢哉羞x中,然后右擊鼠標(biāo)添加行或者刪除行,
也可以整列選中,然后右擊鼠標(biāo)添加或者刪除列。上文中提到日勺數(shù)據(jù)集合有5個(gè)字段,因此需
要5列來(lái)顯示,為此需要增長(zhǎng)兩列。
4)在數(shù)據(jù)源商口中(假如沒有顯示日勺話,選擇【數(shù)據(jù)】菜單下H勺【顯示數(shù)據(jù)源】即可)
選擇上文中創(chuàng)立日勺ctlsDemo.xsd數(shù)據(jù)集,將ProdCat、SubCat、OrderYear、OrderQtr和Sales
分別拖入到Table控件日勺詳細(xì)信息行日勺不一樣列中去。
5)設(shè)置標(biāo)題行文字顯示都居中'Sales的)內(nèi)容顯示右對(duì)齊,ProdCat、SubCat、OrderYear、
OrderQtr和Sales文本框H勺字體顏色所有設(shè)置成Blue?Sales文本框由于顯示日勺內(nèi)容為銷售額,
因此需設(shè)置數(shù)字顯示格式,小數(shù)位數(shù)。鼠標(biāo)右擊Sales文本框,選擇【屬性】,在文本框?qū)傩?/p>
窗口中,選擇格式Tab頁(yè),在格式代碼處,選擇數(shù)字1,234.00格式即可,選擇完畢之后該文
本框日勺數(shù)字就以逗號(hào)千分位作為分割符,保留2位小數(shù)顯示,效果如下圖所示。
二;;:;:;:銷售額報(bào)表二;;二:
?主體
ProdCatSvbCatOrderYearOrderQtrSales
=Fields!ProdCat.V=Fields!SubCat.Valu(=Fields!0rderY=FieldslOrdei=Fields!Sales.Vai
6)插入一種組實(shí)現(xiàn)分組記錄功能。選中整行,鼠標(biāo)右擊,選擇【插入組】,彈出分組和
排序?qū)傩詫?duì)話框,設(shè)置分組名稱、分組方式、與否顯示組頭或者組尾等屬性即可,本文分組設(shè)
置如下:
,分組名稱:tablel_Groupl
,分組體現(xiàn)式:=Fields!ProdCat.Value;=Fields!SubCat.Value;=Fields!OrderYear.Value?實(shí)現(xiàn)
產(chǎn)品年度銷售額匯總記錄功能。
?不顯示組頭、顯示組尾(至于組頭、組尾是個(gè)什么樣的J東西,大家只要?jiǎng)邮衷囈幌戮鸵荒?/p>
了然了)
?在textbox15中輸入中文“合計(jì)”,在textboxl6文本框中輸入合計(jì)體現(xiàn)式
=Sum(CDbl(FieldsJSales.Value)),設(shè)置完之后效果如下圖所示。
:;:銷售銀報(bào)表:;:;;;;;;:
?主體
ProdCatSubCatOrderYearOrderQtrSales
=Fields!ProdCat.\=Fields!SubCat.Valu(=Fields!OrderY=?ieldslOrdei=CDbl(Fields!Sale
合計(jì)=Sum(CDbl(Fields!
7)新建窗體FrmCllTableDemo,然后在該窗體上添加RcportViewer控件,在窗體FrmCtlTableDcm。代碼窗口里
輸入如卜.代碼:
privatevoidFrmCtlTableDeniol.oad(objectsender,EveniArgse)
(
this.rcportVicwcrl.ProcessingModc=Microsoft.Reporting.WinForms.ProcessingModc.Local:
this.reportViewerl.LocalReport.ReportPath=@"rdlc\cllTableDemo.rdlc”;
//
reportViewer1.LocalReport.DataSources.Add(newReportDataSource(wc11sDemovSales",LoadDataO));
//
this.reportViewerl.RefreshReport();
)
privateDataTablcLoadDataO
(
DataSetdataSet=newDataSet():
dataSet.ReadXml(?^dataXctlsDemo.xml");
returndataSet.Tables[OJ;
)
8)運(yùn)行效果如下圖所示
4.2矩陣控件使用簡(jiǎn)介
1)矩陣控件重要用于顯示CrossTable之類日勺報(bào)表,因此其列數(shù)可以是StaticH勺,也可以
是Dynamic并且Cangrow的,有關(guān)矩陣控件'在RDLC協(xié)議規(guī)范里也有簡(jiǎn)介,其大體內(nèi)容可
以用下圖表達(dá)。
Figure5-Matrix
2)新建報(bào)表文獻(xiàn),命名為ctlMatrixDemo.rdlc;
3)在ctlMatrixDemo.rdlc設(shè)計(jì)器中,拖入Matrix控件,默認(rèn)狀況下是2行2列,左上角
單元格為空白區(qū)域(一般用來(lái)顯示報(bào)表摘要信息如產(chǎn)品/年度等),右上單元格顯示為“歹『,
單擊此處可以增長(zhǎng)列分組,左下單元格顯示為“行”,單擊此處可以添加行分組,右下單元格
顯示為“數(shù)據(jù)”,單擊此處可以添加靜態(tài)行、靜態(tài)列。
4)在矩陣左上角單元格空白區(qū)域拖入矩形控件,然后在該矩形控件中拖入一種折線控件
和兩個(gè)文本框控件,折線當(dāng)做矩形的對(duì)角線,兩個(gè)文本框內(nèi)容為產(chǎn)品和年度分布在折線兩側(cè)。
5)增長(zhǎng)兩個(gè)行分組,分別為matrixl_RowGroupl和matrixl_RowGroup2,
matrixl_RowGroup1的體現(xiàn)式為=Fields!ProdCat.Value,matrixl_RowGroup2口勺體現(xiàn)式為
=Fields!SubCat.Value°
6)增長(zhǎng)兩個(gè)列分組'分別為matrixl_ColumnGroupl何matrix1_ColumnGroup2,
matrix1_ColumnGroup1H勺體現(xiàn)式為=Fields!OrderYear.Value,matrixl_ColumnGroup2H勺體現(xiàn)式
^J=Fields!OrderQtr.Value。
7)在“數(shù)據(jù)”單元格中編輯體現(xiàn)式=Sum(CDbl(Fields!Sales.Value))
8)設(shè)計(jì)完之后,效果如下圖所示:
二;::::;:二二|銷售蝮報(bào)表:二二;;:;二;;
9)新建窗體FrmCllMatrixDemo,然后在該窗體上添加Reportviewer控件,在窗體FrmCtlMatrixDemo代碼窗口
里輸入如下代碼:
privatevoidFrmCtlMatrixDcmo_Load(objectsender,EventArgsc)
{
this.reportViewer1.ProcessingMode=Microsoft.Reporting.WinForms.ProcessingMode.Local;
this.reportViewer1.LocalReport.ReportPath=@"rdlc\ctlMatrixDemo.rdlc”;
//
reportViewer1.LocalReport.DataSources.Add(newReportDataSource(wc11sDemovSa1esz,,LoadDataO)):
//
this,reportViewer1.RcfrcshRcport();
)
privateDataTableLoadDalaO
DataSetdataSet=newDataSet():
dataSet.ReadXml(?^dataXctlsDemo.xml");
returndataSet.Tables[0];
}
10)運(yùn)行效果如下圖所示
4.3子報(bào)表控件使用簡(jiǎn)介
子報(bào)表作為主報(bào)表的一種補(bǔ)充,在顯示明細(xì)內(nèi)容日勺時(shí)候比較管用,本文從怎樣填充子報(bào)表
數(shù)據(jù),怎樣傳遞參數(shù)兩方面簡(jiǎn)介子報(bào)表怎樣使用。
1)新建RDLC報(bào)表,命名為subReportDemo.rdlc:
2)在subReportDemo.rdlc設(shè)計(jì)器中?拖入一種文本框和一種子報(bào)表控件;
3)設(shè)置文木框日勺文木顯示為“子報(bào)表控件演示”:
4)設(shè)置子報(bào)表控件屬性,重要設(shè)置其“子報(bào)表”的J值,這里設(shè)為上文講到日勺
ctITableDemo報(bào)表,效果如下圖所示;
子報(bào)表控件演示
□□□
□ctITableDemo□
□□□
5)新建一種窗體FrmSubReportDemo*添加如下代碼
privatevoidFrmCtlSubReportDemo_Load(objectsender,EventArgse)
|
reportViewerl.LocalReport.SubreportProcessing+=new
SubreportProcessingEventHandler(LocalReport_SubreportProcessing):
//
this.reportViewerl.ProcessingMode=Microsoft.Reporting.WinForms.ProcessingMode.Local:
this.reportViewerl.LocalReport.ReportPath=@/zrdlc\subReportDemo.rd】c”;
//
reportViewerl.LocalReport.DalaSourccs.Add(newRcportDataSourcc(^ctlsDcmovSales”,LoadDataO)):
//
this.reportViewerl.RefreshReport():
voidLocalReport_SubreportProcessing(objectsender,SubreportProcessingEventArgse)
e.DataSources.Add(newReportDataSource(wct1sDemovSales",LoadDataO)):
)
privateDataTableLoadDataO
|
DataSetdataSet=newDataSet():
dataSet.ReadXml(6,zdata\ctlsDemo.xml");
returndataSet.Tables[0]:
)
這里,區(qū)別于其他顯示RDLC報(bào)表程序的代碼就是對(duì)子報(bào)表的處璉,本文在FnnCHSubReportDemoJxad事件里添加
了一種對(duì)子報(bào)表事件的)處理:reportViewer1.LocalReport.SubreportProcessing+=new
SubrcportProcessingEvcntHand1er(LocalReport_SubrcportProccssing);
6)有關(guān)子報(bào)表參數(shù)怎樣傳遞,在RDLC報(bào)表參數(shù)簡(jiǎn)介一文中簡(jiǎn)介;
7)運(yùn)行效果如下圖所示
腳FraCtISubReportDeaoSB?
/1,八|“-WT」L&,100%
子報(bào)表控件演示
ProdCatSubCatOrderYearOrderQtrSales
ComponentCrankset2003QI13,599.96
ComponentCrankset2003Q222,151.28
合計(jì)35,751.24
AccessoryPumps2003Q28,241.71
臺(tái)計(jì)8,241.71
4、RDLC參數(shù)簡(jiǎn)介
5.1報(bào)表參數(shù)處理
1)修改上文提高的ctlTableDemo.rdlc報(bào)表為例,該報(bào)表用于顯示產(chǎn)品每季度的銷售額。
修改該報(bào)表,給該報(bào)表添加一種參數(shù)prod_cat,用于過(guò)濾只顯示產(chǎn)品系統(tǒng)為參數(shù)prod_cat值對(duì)
應(yīng)的產(chǎn)品季度銷售額。
2)在ctlTableDemo.rdlc設(shè)計(jì)器中,選擇【報(bào)表】菜單,【報(bào)表參數(shù)】菜單,在報(bào)表參數(shù)
界面中,添加一種報(bào)表參數(shù)取名為“prod_cat_sub”,類型為String,提醒信息為“輸入產(chǎn)品
系列名稱”,容許空白值;
3)選中tableI控件,鼠標(biāo)右擊,選擇【屬性】,選中【篩選器】Tab頁(yè),在篩選器列表
中添力口:=Fields!ProdCat.Value二二Paramelers!prod_cat_sub.Value;
4)在FrmCtlTablcDenio窗體中添加下述代碼,用紅色表達(dá)H勺2行代碼:
privatevoidFrmCtlTableDemo_Load(objectsender,EventArgse)
this,reportViewer1.ProcessingMode=Microsoft.Reporting.WinForms.ProcessingMode.Local;
this,reportViewer1.LocalReport.RcportPath=@z,rdlc\ctlTablcDcmo.rdlc”;
//
reportViewerl.LocalReport.DataSources.Add(newReportDataSource(wct1sDemovSales",LoadDataO)):
//
ReportParameterp-newReportParameter(*prod_Cat_Sllb","Component");
reportViewerl.LocalReport.SetParameters(newReportParameter[]{p:):
//
this.reportViewerl.RefreshReporl():
}
5)運(yùn)行成果如下圖所示,顯示Component產(chǎn)品系列的產(chǎn)品季度銷售額;
?FmCtlTableDeBo匚叵|區(qū):
1,1/1]J⑤d110跳
銷售銀報(bào)表
ProdCatSubCa"OrderYearOrderQtrSales
ComponentCrankset2003QI13,599.96
ComponentCrankset2003Q222,151.28
合計(jì)35,751.24
5.2子報(bào)表參數(shù)處理
1)在程序里面,本人尚未找到直接向子報(bào)表傳遞參數(shù)日勺措施,不過(guò)可以用其他日勺措施變
通實(shí)現(xiàn),在主報(bào)表的Jsubreport控件屬性里面設(shè)置參數(shù),通過(guò)主報(bào)表傳遞過(guò)去。
2)以上文提到H勺FrmSubReportDemo為例,其主報(bào)表為subReportDemo.rdlc,先設(shè)置主
報(bào)表B勺參數(shù)。在subReportDemo.rdlc報(bào)表設(shè)計(jì)器中選擇【報(bào)表】,【報(bào)表參數(shù)】,在報(bào)表參數(shù)對(duì)
話框中,增長(zhǎng)一種參數(shù)。參數(shù)名稱為prod_cat>參數(shù)類型為String,參數(shù)提醒為“輸入產(chǎn)品系
列名稱”。
3)選中子報(bào)表subreport1,鼠標(biāo)右擊*選擇【屬性】,選擇【參數(shù)】tab頁(yè),添加一種參
數(shù)。參數(shù)名稱為“prod_cat_sub",#^ffi=Paramctcrs!prod_cat.Value。為此*主報(bào)表日勺參數(shù)名
與子報(bào)表日勺參數(shù)名稱要不一致。
4)打開subreport1對(duì)應(yīng)日勺子報(bào)表設(shè)計(jì)器,本文為cdTableDemo.rdlc?該ctlTableDemo.rdlc
H勺參數(shù)在上文中已經(jīng)設(shè)置,這里不再贅述。
5)運(yùn)行效果如下圖所示。(源碼網(wǎng)整頓:)
5、RDLC鉆取功能實(shí)現(xiàn)
本Demo在主報(bào)表會(huì)顯示一種部門列表(部門1D、部門名稱等),然后通過(guò)鉆取功能可實(shí)
現(xiàn)特定部門日勺員工信息展示,下述為詳細(xì)操作環(huán)節(jié)。
1)準(zhǔn)備好兩個(gè)數(shù)據(jù)源,本文為2個(gè)xml文獻(xiàn)(departments.xml和Employees.xml)?這兩
個(gè)文獻(xiàn)放在項(xiàng)目日勺Data文獻(xiàn)夾下,尤其注意日勺是這兩個(gè)文獻(xiàn)的)【復(fù)制到輸出目錄】屬性要選
擇“一直復(fù)制”,負(fù)責(zé)工程編譯H勺時(shí)候不會(huì)將這兩個(gè)文獻(xiàn)生成到bin目錄下。
2)新建報(bào)表,命名為“driHlhrough.rdlc”;新建一種數(shù)據(jù)集,命名為“d叩arlmenls”,
在該數(shù)據(jù)集中添加一種Datatable*表構(gòu)造如下:
Department!DInt32
NameString
GroupNameString
ModifiedDateDateTime
rowguidSiring
3)在drilllhrough.rdlc設(shè)計(jì)器中,拖入種文本框和種Table控件。文本框顯示內(nèi)容為
°DrillThroughDemo"?在Table控件中拖入DepartmenllD和Name兩列。
4)添加Name列的導(dǎo)航、鉆取功能。右擊Name文本框,選擇【屬性】,選擇【導(dǎo)航】
Tab頁(yè),在“超級(jí)鏈接”處選擇“跳至報(bào)表”(該報(bào)表為顯示鉆取實(shí)現(xiàn)日勺目的報(bào)表,假設(shè)為
drillthroughDetail.rdlc,且已經(jīng)存在,因此在實(shí)踐時(shí),可以再本操作之前'先創(chuàng)立一種
drillthroughDetaiLrdlc報(bào)表),設(shè)置“跳至報(bào)表”為drillthroughDetail,點(diǎn)擊【參數(shù)】按鈕,會(huì)
彈出參數(shù)設(shè)置對(duì)話框。在對(duì)話框中,添加一種參數(shù),名稱為DepartmenilD,值為
=Fields!DepartmentID.Value;
5)設(shè)計(jì)drillthroughDetail.rdlc報(bào)表,先新建一種該報(bào)表對(duì)應(yīng)的J數(shù)據(jù)集,名稱為employees,
添加一種DataTable?名稱為employee,employee表部分內(nèi)容如下:
<table>
<EmployeeID>l</EmployeeID>
<FirstName>Terri</FirstName>
<AddrcsslD>!</AddrcssID>
<ShiftID>l</ShiftID>
<LastName>Duffy</LastName>
<MiddleName>Lee</MiddleName>
<NameStyle>false</NameSlyle>
<NationalIDNumber></NationalIDNumber>
<Title>VPEngineeiiiig</Title>
<HireDate>l998-03-03T00:00:00.0000000-08:00</HireDate>
<BirthDatc>1961-09-01T00:00:00.0000000-07:00</BirthDatc>
<LoginID>adventure-works\Terri</LoginID>
<EmailAddress></EmailAddress>
<DepartmentID>1</DepartmentID>
<MaritalStatus>S</MaritalStatus>
<EmergencyContactName>TadOrman</EmergencyContactName>
<EmergencyContactPhone>586-883-8338</EmergencyContactPhone>
<SalariedFlag>true</SalariedFlag>
<Gender>F</Gender>
<ManagerID>300</ManagerID>
<PayFrequency>2</PayFrequency>
<BaseRatc>63.4615</BascRatc>
<VacationHours>1</VacationHours>
<SickLeaveHours>2()</SickLeaveHours>
<SaIesPersonFlag>false</SalesPersonFlag>
<CurrentFlag>true</CurrentFlag>
<ModifiedDate>2003-0M5T19:26:13.9000000-08:00</ModifiedDate>
<iowguid>lb76e019-0d60-4d48-b405-c9144fb9b3ab</rowguid>
</table>
從表的J內(nèi)容中,我們可以大體判斷出其構(gòu)造是什么樣日勺啦。
6)拖入一種文本框控件和表格控件到drillthroughDctail.rdlc報(bào)表設(shè)計(jì)器中,并從
employees數(shù)據(jù)集中拖入對(duì)應(yīng)字段到表格控件中,設(shè)置完畢之后,效果如下圖所示。
DrillThroughDemo
EmployeFirstNameLastNameTitleDepartment
二Sum(FL=First(Fields!F=First(FieldsILas=First(Fields!=Sum(Field
7)設(shè)置drillthroughDetail.rdlc報(bào)表H勺參數(shù):參數(shù)名稱為DepartmentID,類型為Integer;
8)設(shè)置drillthroughDetail.rdlc報(bào)表表格控件日勺篩選器,體現(xiàn)式為
=CInt(Fields!DepartmentID.Value),運(yùn)算符為二,值為二Parameters!DepartmentID.Value°
9)新建一種窗體FrmDrillThrough,添加一種ReporlViewer控件,在代碼編緝窗口5添
加下述代碼:
privatevoidFrmDriHThrough_Load(objectsender,EventArgse)
{
reportViewerl.ProcessingMode=ProcessingMode.Local;
reportViewer1.Loca1Report.ReportPath=6*Rdlc/dri11through,rdlc*;
reporiViewer1.LocalRep0rl.DataSources.Add(newReportDataSource(*<lepartmenls_departmenl
LoadData(@*Data\departments.xml*)));
lepuiiViewei1.RefiebhRepuiI(),
)
//讀取XML數(shù)據(jù)
privateDataTableLoadDaia(stringxmlFi1ePath)
(
DataSetdataSet=newDataSet();
dataSet.ReadXml(xmlFilePath):
returndataSet.Tables[0];
privatevoidreportviewerl_Dri1Ithrough(objectsender,DrillthroughEventArgse)
LocalReportlocalReport=(LocalReport)e.Report;
localReport.DataSources.Add(newReportDataSource(''employeesemployee”,
LoadData(6*Data\Employees.xml")));
10)運(yùn)行效果如下圖所示。
鼠標(biāo)移到Name一列,會(huì)變成手H勺形狀’如單擊Engineering,就會(huì)鉆取取來(lái)Engineering
部門H勺員工信息,如下圖所示。
FraDrillThrough
i?、<1/I,?I*.J-』4Jd,100%
DrillThrouahDem。
EmployFirstNameLastNameTitleDepartmen
eeIDtID
1TerriDuffyVPEngineering1
2JianShuoWangEngineeringManager1
3MichaelSullivanSr.DesignEngineer1
4SharonSalavariaDesignEngineer1
5GailEricksonDesignEngineer1
6JossefGoldbergDesignEngineer1
6、RDLC自定義工具條
1)自定義工具條可以理解為對(duì)Reportviewer的]ToolBar功能H勺一種變通實(shí)現(xiàn),如添加代
碼實(shí)現(xiàn)ToolBar刷新按鈕的功能、ToolBar頁(yè)導(dǎo)航功能。
如刷新功能代碼實(shí)現(xiàn)為:
this.rptViewer.RefreshReport():
如ToolBar停止按鈕日勺代碼實(shí)現(xiàn)為:
this.rptViewer.CanceIRendering(0);
2)在做項(xiàng)目的)時(shí)候,假如用ReportViewer控件做報(bào)表展示工具B勺話,打印和導(dǎo)出日勺代
碼實(shí)現(xiàn),應(yīng)當(dāng)要掌握。
導(dǎo)出功能:R叩orlViewer導(dǎo)出都是通過(guò)Render來(lái)實(shí)現(xiàn)日勺,如下代碼為導(dǎo)出Excel
Microsoft.Reporting.WinForms.Warning[]Warnings:
string[]strStreamlds;
stringstrMimeType;
stringstrEncoding;
stringstrFileNameExtvision;
//this,rptViewer.LocalReport.Render(
byte[]bytes=this,rp二Viewer.LocalReport.Render("Excel”,nul1,outstrMimeType,outstrEncoding,
outstrFileNameExtension,outstrStreamlds,outWarnings);
stringstrFilePath=?"D:\exportdemo.xls”;
using(System.10.FiIcStrcamfs=newl-ileStream(strFilePath,EiIcModc.Create))
fs.Wrile(byles,0,bylea.Length);
打印例子下載,打印也是一種間接行為,有點(diǎn)類似ReporlViewer控件需要通過(guò)點(diǎn)擊打印按
鈕來(lái)打印同樣并沒有提供直接的打印函數(shù)為此本人封裝了打印功能(在附件/'Jwhhrdlc.dll
文獻(xiàn)中)并開放了打印函數(shù),顧客可以調(diào)用下面語(yǔ)句打印報(bào)表:
〃打印出錯(cuò)時(shí),錯(cuò)誤信息描述
StringerrMsg=String.Emptys;
〃調(diào)用打印函數(shù)(彈出打印設(shè)置對(duì)話框)返回false打印失敗;
boolbln=Printer.PrintDialog(this.reportViewerl.LocalReport,outerrMsg);
//調(diào)用打印函數(shù)(直接打印)返回false打印失?。?/p>
boolbln=Printer.Print(this.reportViewerl.LocalReport,outerrMsg);
7、設(shè)計(jì)器實(shí)現(xiàn)
8.1RDLCXML分析
1)RDLC文獻(xiàn)其實(shí)就是一種XML文獻(xiàn),有諸多結(jié)點(diǎn)和元素,在處理方案資源管理器中
選中某個(gè)rdlc文獻(xiàn),鼠標(biāo)右擊,選擇【打開方式】,在打開方式對(duì)話框中選擇XML編輯器,
單擊確定按鈕即可。
在X1Y11文獻(xiàn)中毛^們可以看到DataSources、PageHeader%DataSets-tReportItems等結(jié)點(diǎn),網(wǎng)上有篇Vs2023
報(bào)表設(shè)計(jì)器XML分析總結(jié)H勺博文
,寫H勺比較詳細(xì),大家可以參照。
2)這里比較關(guān)鍵H勺就是DataSetB勺處理,Rdlc報(bào)表無(wú)論是表格顯示還是矩陣顯示或者列
表顯示數(shù)據(jù),都需要關(guān)聯(lián)DataSet。在前面提到日勺所有篇幅中,都是先創(chuàng)立一種數(shù)據(jù)集,并為
該數(shù)據(jù)集添加一種DataTabie>然后將表字段拖放到表格控件、矩陣控件或者列表控件,用以
顯示數(shù)據(jù)。這樣做,從效率上來(lái)看不是最高的,由于手工產(chǎn)生一種目日勺DataTabie比較耗時(shí)。
為此,我們可以先直接編輯rdlc口勺xml文獻(xiàn),編輯器dataset日勺內(nèi)容即可,如下所示:
<DataSets>
<DataSelName="cl1sDemo_vSales*>
〈Fields〉
<FieldName=z,ProdCatw>
<DataBield>ProdCat</Datal'ield>
<rd:TypeName>System.String</rd:TypeName>
</Field>
〈FieldName="SubCat*>
<DataFie1d>SubCat</DalaFie1d>
<rd:TypcNamc>Systcni.String</rd:TypeNamc>
</Field>
<HieldNdiiie-^OrdeiYecir*>
<DataField>OrderYear</DataField>
<rd:TypeName>System.Int32</rd:TypeXame>
〈/Field》
〈FieldName="OrderQtr”>
<DataField>OrdcrQtr</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<FieldName=*Sales*>
<DataFie1d>Sales</DataField>
<rd:TypeName>Systeni.Double</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DummyDataSource</DataSourceName>
<CommandText/>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Qucry>
<rd:DataSetlnfo>
<id.DuIdSelN<ime>cIlsDenio</id.DaIciSeLName>
<rd:TableName>vSales</rd:TableName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
修改其Field定義,修改Dataset的Name即可,最終別忘了保留即可。
8.2RDLC設(shè)計(jì)器實(shí)現(xiàn)
1)在8.1中已經(jīng)提到了RDLC報(bào)表文獻(xiàn),其實(shí)就是一種xml文獻(xiàn),那么只要我們用程序
動(dòng)態(tài)產(chǎn)生一種xml文獻(xiàn),只要這個(gè)xml文獻(xiàn)日勺節(jié)點(diǎn)定義、元素定義、屬性定義符合RDLC協(xié)
議規(guī)范即可。
2)有關(guān)RDLC設(shè)計(jì)器,已經(jīng)有人可以很好地實(shí)現(xiàn)它了,并且是OpenSource的,大家可
以去看看。
由于不懂得怎樣在博文中上傳附件,把有關(guān)資料已經(jīng)上傳到CSDN,大家可以搜索“RDLC
使用手冊(cè)”下載。
使用RDLC報(bào)表(一)
1建立數(shù)據(jù)源
啟動(dòng)VS2023新建一種‘窗體項(xiàng)目,命名為TestProj
在左邊的窗體內(nèi)選擇“添加新數(shù)據(jù)源”或在菜單上操作“添加新數(shù)據(jù)源”:
選擇后出現(xiàn)對(duì)話窗體,選擇“數(shù)據(jù)庫(kù)”,進(jìn)入“下一步”:
本數(shù)據(jù)源以SqlScrvcr2023所提供的/Northwind數(shù)據(jù)庫(kù)為例,因此在數(shù)據(jù)庫(kù)內(nèi)選擇驅(qū)動(dòng)程序?yàn)?/p>
SqlServer?詳細(xì)操作視所用數(shù)據(jù)庫(kù)而定(假如連接為Oracle,提議用Oracle所提供日勺ODP
for.NET,地址:
)°
選擇數(shù)據(jù)源后,指定數(shù)據(jù)庫(kù)文獻(xiàn),并進(jìn)行測(cè)試,假如連接不通,請(qǐng)檢查你日勺軟件設(shè)置。
進(jìn)行下一步,至顯示出庫(kù)文獻(xiàn)內(nèi)日勺表及視圖,然后打開表,并選擇其中的Employees,選擇完
畢。
在數(shù)據(jù)源窗口
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共基礎(chǔ)考試題目及答案
- 工程制圖考試題及答案6
- 產(chǎn)品研發(fā)流程時(shí)間線管理模板
- 項(xiàng)目管理任務(wù)分解模板WBS工作分解結(jié)構(gòu)法
- 財(cái)務(wù)定期報(bào)告承諾函(7篇)
- 高級(jí)法制員考試題及答案
- 質(zhì)量控制檢查表全面指標(biāo)覆蓋
- 初二北京地理試題及答案
- 2025年寧夏電工考試試題及答案
- 美術(shù)理論考試題目及答案
- 架線弧垂計(jì)算表(應(yīng)力弧垂插值計(jì)算)
- 萬(wàn)夫一力天下無(wú)敵 課件-2023-2024學(xué)年高一上學(xué)期增強(qiáng)班級(jí)凝聚力主題班會(huì)
- 調(diào)試、試運(yùn)行與移交管理方案
- GB/T 26655-2011蠕墨鑄鐵件
- 熱鍍鋅鋼管技術(shù)標(biāo)準(zhǔn)
- 周三多管理學(xué)第03章管理的基本原理
- 基礎(chǔ)生態(tài)學(xué)第4章種群及其基本特征課件
- 虛擬現(xiàn)實(shí)與增強(qiáng)現(xiàn)實(shí)頭戴顯示關(guān)鍵技術(shù)及應(yīng)用項(xiàng)目
- 《電力工業(yè)企業(yè)檔案分類規(guī)則0大類》(1992年修訂版)
- GB∕T 26520-2021 工業(yè)氯化鈣-行業(yè)標(biāo)準(zhǔn)
- 溫州醫(yī)科大學(xué)《兒科學(xué)》支氣管肺炎
評(píng)論
0/150
提交評(píng)論