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

RDLC是一個(gè)不錯(cuò)的報(bào)表萧诫,有著比較不錯(cuò)的設(shè)計(jì)模式和展現(xiàn)效果崇堰,在我的Winform開發(fā)里面座享,使用RDLC也是一個(gè)比較方便操作帝嗡,如可以參考文章《DevExpress的XtraReport和微軟RDLC報(bào)表的使用和對比》或者《會員管理系統(tǒng)的設(shè)計(jì)和開發(fā)(2)-- RDLC報(bào)表的設(shè)計(jì)及動(dòng)態(tài)加載》進(jìn)行了解峡蟋。但是基于MVC方式坟桅,如何構(gòu)建和展現(xiàn)RDLC報(bào)表呢华望?本文主要介紹如何在基于MVC4+EasyUI的Web開發(fā)框架上進(jìn)行RDLC的集成和使用。
1仅乓、RDLC綁定數(shù)據(jù)源
RDLC的報(bào)表設(shè)計(jì)赖舟,是使用VS直接進(jìn)行編輯的,因此它不管是在Web上夸楣,還是在Winform上宾抓,設(shè)計(jì)的方式都差不多,好像綁定數(shù)據(jù)源的方式有一點(diǎn)不同豫喧,WInform的可以選擇基于石洗,而Web的只能基于數(shù)據(jù)庫連接方式構(gòu)建數(shù)據(jù)綁定對象。
它們兩者之間在創(chuàng)建數(shù)據(jù)源的時(shí)候紧显,彈出的對話框選擇界面如下所示讲衫,看起來Winform的方式選擇數(shù)據(jù)源的方式很多樣化。



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

在RDLC的設(shè)計(jì)界面上,它們的操作內(nèi)容好像是一樣的房午,沒有什么差異矿辽,可以使用各種數(shù)學(xué)函數(shù)SUM、COUNT等郭厌,也可以使用對字段的表達(dá)式袋倔,格式樣式等方式,從而方便構(gòu)建出一些準(zhǔn)確折柠、美觀的報(bào)表宾娜,這部分可以參考文中開始的那兩篇引用文章,這里就不再進(jìn)行細(xì)節(jié)上的贅述扇售,因?yàn)樗鼈兪且粯拥摹?br> 2前塔、在Web界面上創(chuàng)建一些功能按鈕和實(shí)現(xiàn)
我們在MVC項(xiàng)目里面,創(chuàng)建并保存好RDLC報(bào)表文件到對應(yīng)的Report目錄上承冰,如下所示华弓。

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

HTML代碼如下所示

<div style="padding:10px; border:1px solid black">
<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" style="display: none; overflow-y: auto" 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的報(bào)表進(jìn)行數(shù)據(jù)綁定并呈現(xiàn)出來吱抚。
綁定RDLC報(bào)表,并賦值對應(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() == "image") ? "image/jpeg" : mimeType);

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



當(dāng)然既绕,我們上面還有其他功能的操作,如PDF功能的展現(xiàn)涮坐,這個(gè)是一個(gè)不錯(cuò)的格式展現(xiàn)岸更,每頁分的很好,如果在IE里面膊升,會獨(dú)立打開PDF文件怎炊;如果是Chrome瀏覽器,則會在瀏覽器里面直接打開廓译,比較好评肆。



當(dāng)然,Excel和Word就只能下載進(jìn)行查看了非区,因?yàn)闉g覽器并不支持直接在上面進(jìn)行預(yù)覽查看的了瓜挽,除非借助其他控件或者做法。
3征绸、圖片內(nèi)容的連續(xù)輸出

我們了解RDLC的話久橙,應(yīng)該知道,一般RDLC報(bào)表管怠,它都是通過一個(gè)DeviceInfo的信息進(jìn)行展現(xiàn)的淆衷,如下所示是一個(gè)標(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的高度這樣子她肯,但是我的報(bào)表里面可能有很多記錄佳头,如何能夠讓它全部展現(xiàn)出來呢?
方法是有的,不過不是很完美晴氨,就是需要計(jì)算大概的尺寸康嘉,然后修改PageHeight的數(shù)值,讓它動(dòng)態(tài)的刪除最大的記錄籽前,達(dá)到全部內(nèi)容都可以輸出看到亭珍。
為了達(dá)到這個(gè)目的腊瑟,我對圖片格式輸出的報(bào)表,對它的高度進(jìn)行了一個(gè)簡單的計(jì)算块蚌,然后換成它的標(biāo)準(zhǔn)高度,這樣代碼如下所示膘格。

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

最后界面代碼如下所示峭范。



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瘪贱,隨后出現(xiàn)的幾起案子纱控,更是在濱河造成了極大的恐慌,老刑警劉巖菜秦,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甜害,死亡現(xiàn)場離奇詭異,居然都是意外死亡球昨,警方通過查閱死者的電腦和手機(jī)尔店,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來主慰,“玉大人嚣州,你說我怎么就攤上這事」猜荩” “怎么了该肴?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長藐不。 經(jīng)常有香客問我匀哄,道長,這世上最難降的妖魔是什么雏蛮? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任涎嚼,我火速辦了婚禮,結(jié)果婚禮上挑秉,老公的妹妹穿的比我還像新娘铸抑。我一直安慰自己,他們只是感情好衷模,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布鹊汛。 她就那樣靜靜地躺著,像睡著了一般阱冶。 火紅的嫁衣襯著肌膚如雪刁憋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天木蹬,我揣著相機(jī)與錄音至耻,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尘颓,可吹牛的內(nèi)容都是我干的走触。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疤苹,長吁一口氣:“原來是場噩夢啊……” “哼互广!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卧土,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惫皱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后尤莺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旅敷,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年颤霎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了媳谁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡友酱,死狀恐怖韩脑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粹污,我是刑警寧澤段多,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站壮吩,受9級特大地震影響进苍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸭叙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一觉啊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沈贝,春花似錦杠人、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至学歧,卻和暖如春罩引,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枝笨。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工袁铐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揭蜒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓剔桨,卻偏偏與公主長得像屉更,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子洒缀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容