winform & Fastreport
由winform製作使用介面
再由fastreport繪製表格出來
fastreport必須先連接至資料庫
若使用的資料庫資料是屬於在不同資料表時
在fastreport上也必須join出一張新的表出來
不行使用多張表,然後一一拖拉出來當欄位(資料會有誤)
而在fastreport的新表名稱要記住!
要記住!
要記住!
因為很重要 要講三次
在winform裡的介面前端基本上不需要設定什麼
重點在後端的C#程式碼
//如果不需要在一個datatable中再次搜尋條件 即不用這段
var v = from r in dt.Rows.Cast<DataRow>()
where r["Stay_day"].ToString() != "" && Convert.ToInt32(r["Stay_day"].ToString()) > Stay_day
select r;
dt = v.CopyToDataTable(); //這邊為我存放資料的datatable
Report report = new Report(); //建立新的report
string path = Application.StartupPath + @"\Report\report.frx"; //抓取winform資料夾裡可執行的檔案 (.exe檔) 基本上在根目錄裡的bin之中
report.Load(path); //讀取檔案
report.RegisterData(dt, "Table"); //註冊report
report.Show(); //執行report (等同於fastreport中的ctrl+P)
=========我是分隔線=========
比較要注意的是fastreport上的設定
剛剛說fastreport上如果要join 那SQL語句也是不可馬虎
常用到的join語句中 我們常常會因為join因此改了原有的欄位名稱
假設現在下方有一段最簡單的join的方法
select abc from abc,cba where abc01 = cba01
當有需要時就必須把欄位名稱給了的話就會變成
select abc as "123" from abc,cba where abc01 = cba01 --(as可以刪除沒關西)
而在這邊的123 必須與後端C#的datatable的名稱一樣!(這地方的大小寫沒有關西 fastreport 扔然抓得到)
而且在fastreport也要預先把列印出來的畫面中的樣子設計好
(fastreport中的名稱如果有變動 Name屬性有改變的話 保險起見可以把介面中的欄位再重拉一次,
因為如果改變過 在datatable丟過去的時候可能會抓不到欄位)
再來就是剛剛說的join 出來的table名字為什麼要記住
因為在註冊report的時候 後方有一個雙引號中的名稱 是要跟你在fastreport的join表格名字
要一模一樣!
一模一樣!
一模一樣!!
不然他會說找不到表格 會註冊失敗 會沒辦法繪製圖表!
(下台一鞠躬)