溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表

發(fā)布時間:2020-07-21 08:34:17 來源:網(wǎng)絡(luò) 閱讀:334 作者:wuhuacong 欄目:開發(fā)技術(shù)

RDLC是一個不錯的報表,有著比較不錯的設(shè)計模式和展現(xiàn)效果,在我的Winform開發(fā)里面,使用RDLC也是一個比較方便操作,如可以參考文章《DevExpress的XtraReport和微軟RDLC報表的使用和對比》或者《會員管理系統(tǒng)的設(shè)計和開發(fā)(2)-- RDLC報表的設(shè)計及動態(tài)加載》進(jìn)行了解。但是基于MVC方式,如何構(gòu)建和展現(xiàn)RDLC報表呢?本文主要介紹如何在基于MVC4+EasyUI的Web開發(fā)框架上進(jìn)行RDLC的集成和使用。

1、RDLC綁定數(shù)據(jù)源

RDLC的報表設(shè)計,是使用VS直接進(jìn)行編輯的,因此它不管是在Web上,還是在Winform上,設(shè)計的方式都差不多,好像綁定數(shù)據(jù)源的方式有一點不同,WInform的可以選擇基于,而Web的只能基于數(shù)據(jù)庫連接方式構(gòu)建數(shù)據(jù)綁定對象。

它們兩者之間在創(chuàng)建數(shù)據(jù)源的時候,彈出的對話框選擇界面如下所示,看起來Winform的方式選擇數(shù)據(jù)源的方式很多樣化。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表

最終,通過Web方式構(gòu)建了一個數(shù)據(jù)集,并在設(shè)計視圖里面設(shè)計一個用戶的報表界面,并綁定它們對應(yīng)的字段,具體如下所示。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表

在RDLC的設(shè)計界面上,它們的操作內(nèi)容好像是一樣的,沒有什么差異,可以使用各種數(shù)學(xué)函數(shù)SUM、COUNT等,也可以使用對字段的表達(dá)式,格式樣式等方式,從而方便構(gòu)建出一些準(zhǔn)確、美觀的報表,這部分可以參考文中開始的那兩篇引用文章,這里就不再進(jìn)行細(xì)節(jié)上的贅述,因為它們是一樣的。

2、在Web界面上創(chuàng)建一些功能按鈕和實現(xiàn)

我們在MVC項目里面,創(chuàng)建并保存好RDLC報表文件到對應(yīng)的Report目錄上,如下所示。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表

然后創(chuàng)建一個視圖,并在視圖里面構(gòu)建一些按鈕,方便構(gòu)建查詢不同的報表格式功能,具體效果如下所示。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表

HTML代碼如下所示

<div >
	<div>
		<a href="@Url.Action("UserRdlcReport", new { format = "Image" })" class="easyui-linkbutton" data-options="iconCls:'icon-view'">圖片輸出</a>
		<a href="@Url.Action("UserRdlcReport", new { format = "PDF" })" class="easyui-linkbutton" data-options="iconCls:'icon-view'"> PDF輸出</a>
		<a href="@Url.Action("UserRdlcReport", new { format = "Excel" })" class="easyui-linkbutton" data-options="iconCls:'icon-view'">Excel輸出</a>
		<a href="@Url.Action("UserRdlcReport", new { format = "Word" })" class="easyui-linkbutton" data-options="iconCls:'icon-view'">Word輸出</a>
	</div>
</div>
<div id="autoUpdate"  class="SlideContainer">
	<table width="100%" height="100%">
		<tr>
			<td>
				<table>
					<tr>
						<td></td>
						<td></td>
					</tr>
				</table>
			</td>
		</tr>
		<tr><td><iframe id="myReport" width="100%" height="800"></iframe></td></tr>
	</table>
</div>

完成這些布局后,我們還需要在對應(yīng)的控制器里面,對RDLC的報表進(jìn)行數(shù)據(jù)綁定并呈現(xiàn)出來。

綁定RDLC報表,并賦值對應(yīng)的數(shù)據(jù)源操作如下所示。

LocalReport localReport = new LocalReport();
localReport.ReportPath = Server.MapPath("~/Report/WHC.UserReport.rdlc");
var dt = baseBLL.GetAll();

ReportDataSource reportDataSource = new ReportDataSource("DataSet1", dt);
localReport.DataSources.Add(reportDataSource);

呈現(xiàn)的操作代碼如下所示,默認(rèn)我們以圖片進(jìn)行展現(xiàn)。

Warning[] warnings;
string[] streams;
byte[] renderedBytes;

renderedBytes = localReport.Render(
	reportType,
	deviceInfo,
	out mimeType,
	out encoding,
	out fileNameExtension,
	out streams,
	out warnings);

return File(renderedBytes, (format.ToLower() == "p_w_picpath") ? "p_w_picpath/jpeg" : mimeType);

最終默認(rèn)可以看到圖片的報表展現(xiàn)效果。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表

當(dāng)然,我們上面還有其他功能的操作,如PDF功能的展現(xiàn),這個是一個不錯的格式展現(xiàn),每頁分的很好,如果在IE里面,會獨立打開PDF文件;如果是Chrome瀏覽器,則會在瀏覽器里面直接打開,比較好。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表

當(dāng)然,Excel和Word就只能下載進(jìn)行查看了,因為瀏覽器并不支持直接在上面進(jìn)行預(yù)覽查看的了,除非借助其他控件或者做法。

3、圖片內(nèi)容的連續(xù)輸出

我們了解RDLC的話,應(yīng)該知道,一般RDLC報表,它都是通過一個DeviceInfo的信息進(jìn)行展現(xiàn)的,如下所示是一個標(biāo)準(zhǔn)的DeviceInfo對象。

string deviceInfo =
"<DeviceInfo>" +
"  <OutputFormat>" + deviceType + "</OutputFormat>" +
"  <PageWidth>8.5in</PageWidth>" +
"  <PageHeight>11in</PageHeight>" +
"  <MarginTop>0.5in</MarginTop>" +
"  <MarginLeft>1in</MarginLeft>" +
"  <MarginRight>1in</MarginRight>" +
"  <MarginBottom>0.5in</MarginBottom>";

但是這樣的內(nèi)容,如果展現(xiàn)圖片的話,就只會展示一頁的內(nèi)容,一般是800的高度這樣子,但是我的報表里面可能有很多記錄,如何能夠讓它全部展現(xiàn)出來呢?

方法是有的,不過不是很完美,就是需要計算大概的尺寸,然后修改PageHeight的數(shù)值,讓它動態(tài)的刪除最大的記錄,達(dá)到全部內(nèi)容都可以輸出看到。

為了達(dá)到這個目的,我對圖片格式輸出的報表,對它的高度進(jìn)行了一個簡單的計算,然后換成它的標(biāo)準(zhǔn)高度,這樣代碼如下所示。

if(format.ToLower() == "p_w_picpath")
{
	double inchValue = (dt.Count / 37.0) * 11; 
	deviceInfo += string.Format("  <PageHeight>{0}in</PageHeight>", inchValue);
}
else
{
	deviceInfo += "  <PageHeight>11in</PageHeight>";
}

最后界面代碼如下所示。

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表

基于MVC+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(15)--在MVC項目中使用RDLC報表


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI