# 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)
> 安裝完後會在這邊看到↓
> 
---
## 遇到問題
### **Q:** 表格中,某些地方線特別粗

#### **原因**
可以理解成框線重疊。
#### **解法**
這時候只要將某一側的表格框線調整一下,較粗的方向不畫線,就會回復成一條細線
Ex. 調整答對題數資料的文字方塊 ( 將右方框線取消 );總題數資料的文字方塊維持左方框線
答對題數-> 總題數->
如圖可以看到,為了解決總題數的下方粗框線,將總題數的下框線移除,只用合計的上框線。
#### 結果

---
## RDLC,如何合併縱向(列)的儲存格
我自己的做法

這樣就可以實現類似合併儲存格的做法
網路上這個做法↓ 實際用了後覺得不太適合我的範例,就沒用,但他能發現也很神
[參考資料_算實用](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 上異常

解: 將圖檔轉為 JPG 格式,在餵給 RDLC ( 由於 JPG 格式本身不支援透明度,轉換之前須把背景改為白色 )
[參考自己寫的 MoiraTool, Base64ObjectExtension](https://github.com/MoiraHan/MoiraTools/blob/master/MoiraTools/Extensions/Base64ObjectExtension.cs)
---
## RDLC 實現分頁
使用rdlc控件中的矩形就能實現分頁


[參考資料](https://blog.csdn.net/yiershan1314/article/details/75043130)
---
## 使用參數,動態隱藏元件
### C#
```
bool isHideHeaderAndFooter
parameters.Add(new ReportParameter("IsHideHeaderAndFooter", isHideHeaderAndFooter.ToString()));
```
### RDLC 設定
#### 參數

#### 要動態隱藏的元件


※ 不知道為什麼參數用布林值會有問題,果斷放棄不用
原本布林寫 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)
---
## 如何串字串 ? 不是用 + 串字串喔!!!
使用 & ~

---
## 計算並依照格式輸出
範例為計算正確率
```
=Format(Fields!CorrectQuestionCount.Value / Fields!TotalQuestionCount.Value * 100, "0.#\%")
```
---
## 如何調整 Tablix 資料排序 ?
### 調整方法


[參考-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 呈現文字

運算式就能寫
```
"<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. 空白處右鍵 -> 報表屬性

2. 程式碼中寫 Function ( 使用 VB )

3. 使用自定義 Function

※此範例中的 LineHeight 測試後無作用,不需參考(QAQ),但還是說明一下想法:
想使用隱藏的大字來感覺有行距
程式內容
用換行字元"CHR(13)&CHR(10)"拆字串,在將隱藏的大字塞到每一行最後一個字,但其實送進來的字串沒有換行,是寫到 Textbox 上後,發現太寬才有換行。所以還是無法知道該把隱藏的大字插在哪裡
---
## 發布在 Server 上出現找不到此資源 !
rdlc 原本建置動作為「內嵌資源」,因此只會複製到建置後的 bin 資料夾,發布時並不會複製,改為內容就好了
