# RDLC ###### tags: `實作功能` ## 開始實作 [實作Github](https://github.com/MoiraHan/Practice_RDLC) #### 使用環境: VS 2019 #### Nuget 安裝 * ReportViewerForMVC #### 延伸模組安裝 * [Microsoft RDLC Report Designer](https://marketplace.visualstudio.com/items?itemName=ProBITools.MicrosoftRdlcReportDesignerforVisualStudio-18001) > 安裝完後會在這邊看到↓ > ![](https://i.imgur.com/h4axtNW.png) --- ## 遇到問題 ### **Q:** 表格中,某些地方線特別粗 ![](https://i.imgur.com/VmZxSaQ.png) #### **原因** 可以理解成框線重疊。 #### **解法** 這時候只要將某一側的表格框線調整一下,較粗的方向不畫線,就會回復成一條細線 Ex. 調整答對題數資料的文字方塊 ( 將右方框線取消 );總題數資料的文字方塊維持左方框線 答對題數->![](https://i.imgur.com/sGPP6Fw.png) 總題數->![](https://i.imgur.com/IwzSQSp.png) 如圖可以看到,為了解決總題數的下方粗框線,將總題數的下框線移除,只用合計的上框線。 #### 結果 ![](https://i.imgur.com/LSTOFZH.png) --- ## RDLC,如何合併縱向(列)的儲存格 我自己的做法 ![](https://i.imgur.com/ECs1Q5c.png) 這樣就可以實現類似合併儲存格的做法 網路上這個做法↓ 實際用了後覺得不太適合我的範例,就沒用,但他能發現也很神 [參考資料_算實用](https://blog.csdn.net/yixian2007/article/details/51697492?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1) --- ## 從 ChartJs 載下有透明度的 png 圖檔放在 RDLC 上異常 ![](https://i.imgur.com/ZvDfiZ8.png) 解: 將圖檔轉為 JPG 格式,在餵給 RDLC ( 由於 JPG 格式本身不支援透明度,轉換之前須把背景改為白色 ) [參考自己寫的 MoiraTool, Base64ObjectExtension](https://github.com/MoiraHan/MoiraTools/blob/master/MoiraTools/Extensions/Base64ObjectExtension.cs) --- ## RDLC 實現分頁 使用rdlc控件中的矩形就能實現分頁 ![](https://i.imgur.com/MqW1tQg.png) ![](https://i.imgur.com/e6AgllL.png) [參考資料](https://blog.csdn.net/yiershan1314/article/details/75043130) --- ## 使用參數,動態隱藏元件 ### C# ``` bool isHideHeaderAndFooter parameters.Add(new ReportParameter("IsHideHeaderAndFooter", isHideHeaderAndFooter.ToString())); ``` ### RDLC 設定 #### 參數 ![](https://i.imgur.com/QytRgdZ.png) #### 要動態隱藏的元件 ![](https://i.imgur.com/MfyT1Vp.png) ![](https://i.imgur.com/4V66pwt.png) ※ 不知道為什麼參數用布林值會有問題,果斷放棄不用 原本布林寫 iff(Parameters!IsHideHeaderAndFooter.Value = 1, false, true) ( true false 反過來都一樣 ) 在網頁的確沒顯示,但是匯出 PDF 也沒顯示 搞啥XD --- ## 如何從資料集中取得特定行的欄位值 ### 使用 LookUp 函數 ### 解說: 參數1: 條件 參數2: 要篩選的欄位 參數3: 要取得的欄位 參數4: 資料集 以下範例為: 取得 SeqNo 為 3 的那筆資料的 Display 欄位 ``` =LookUp(3, Fields!SeqNo.Value, Fields!Display.Value, "EvaluationItemCommentList") ``` [參考-How to get specific row from Dataset in RDLC report](https://stackoverflow.com/questions/32587328/how-to-get-specific-row-from-dataset-in-rdlc-report) [參考-Microsoft 報表產生器函式 - Lookup 函式](https://docs.microsoft.com/zh-tw/sql/reporting-services/report-design/report-builder-functions-lookup-function?view=sql-server-ver15) --- ## 如何串字串 ? 不是用 + 串字串喔!!! 使用 & ~ ![](https://i.imgur.com/OOkCEdv.png) --- ## 計算並依照格式輸出 範例為計算正確率 ``` =Format(Fields!CorrectQuestionCount.Value / Fields!TotalQuestionCount.Value * 100, "0.#\%") ``` --- ## 如何調整 Tablix 資料排序 ? ### 調整方法 ![](https://i.imgur.com/5EbaRQZ.png) ![](https://i.imgur.com/4w2o3oW.png) [參考-RDLC 矩陣欄位排序 | Raymond Chu .NET - 點部落](https://dotblogs.com.tw/hznraymond/2013/11/26/131368) ### 如何配置特殊排序 ? #### 何為特殊排序: 資料如下: ["", "1", "2", "3", "4", "5", "6", "7"] 需求: 讓 "" 排在最後面 解法: 排序那邊使用表達式 程式解說: 如果欄位是 "", 輸出 "999";如果不是則輸出原本的值。而因為在排序這邊設定,所以只會影響排序,不影響顯示的結果 ``` =IIF(Fields!QuestionNum.Value = "", "999", Fields!QuestionNum.Value) ``` [參考-SSRS Report Custom Sort Order](https://stackoverflow.com/questions/39170904/ssrs-report-custom-sort-order) ※ IIF用法: > 使用IIF 判斷DataSet傳回欄位值傳回True 就顯示 "是",反之顯示"否" > > =First(IIF(Fields!IsAll.Value = "True","是","否"), "DataSet1") [參考-[RDLC] RDLC報表檔IIF使用方式](http://hugowu23.blogspot.com/2015/01/rdlc-iif.html) --- ## 如何使用 HTML 呈現文字 ![](https://i.imgur.com/h6YlQ4s.png) 運算式就能寫 ``` "<p style='line-height:2;color:red'>" & Field!xxxx.Value & "</p>" ``` 不過目前實測 line-height 完全沒用,Color red 倒是有用 [參考-Microsoft](https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/cc627491%28v%3dsql.100%29) --- ## 自定義 Function 1. 空白處右鍵 -> 報表屬性 ![](https://i.imgur.com/h8DpSWT.png) 2. 程式碼中寫 Function ( 使用 VB ) ![](https://i.imgur.com/RRSB3kq.png) 3. 使用自定義 Function ![](https://i.imgur.com/HosaZkc.png) ※此範例中的 LineHeight 測試後無作用,不需參考(QAQ),但還是說明一下想法: 想使用隱藏的大字來感覺有行距 程式內容 用換行字元"CHR(13)&CHR(10)"拆字串,在將隱藏的大字塞到每一行最後一個字,但其實送進來的字串沒有換行,是寫到 Textbox 上後,發現太寬才有換行。所以還是無法知道該把隱藏的大字插在哪裡 --- ## 發布在 Server 上出現找不到此資源 ! rdlc 原本建置動作為「內嵌資源」,因此只會複製到建置後的 bin 資料夾,發布時並不會複製,改為內容就好了 ![](https://i.imgur.com/B5mQRzh.png)