一.常用控件
文本框:輸入文字或表達式
表格:設置表格的行列數,輸入數字或表達式
子報表:放置子報表后,系統會自動增加一個頁面,你可以在此頁面上設計需要的報表。系統在打印處理時,先按主報表打印,當碰到子報表時會自動轉入子報表的頁面進 行打印處理,完成后繼續執行主報表打印的工作,所以我們又稱之為嵌套報表。
復選框:根據布爾表達式是否為ture來顯示是否 √(如性別男女)
條形碼:綁定掃描碼(如靜滴單),一般Type為Code128
交叉表:Matrix
頁面設置:設置紙張大小及頁邊距
邊框設置:設置是否顯示上下左右邊框以及邊框線條的設置
邊框寬度:下拉三角可以選擇邊框寬度設置
二.常用報表欄
報表標題區(ReportTitle):僅在第一頁顯示在紙張的上部。一般用於打印報表的標題等信息。
報表合計(ReprotSummary):僅顯示在所有數據的最后末尾。一般用於打印統計信息等。
頁眉(PageHeader):顯示在每頁的最上部。通過設置你可以讓它置於報表抬頭之上或者之下。一般用於打印頁眉信息等。
數據區(data):綁定數據源顯示數據。
數據首(Header):顯示在所有數據源的最上部,僅打印一次。一般用於顯示相關摘要信息,與頁眉的區別是當該頁無數據時,數據首的內容不顯示且僅顯示一次。
數據尾(Footer):顯示在所有數據源的最下部,僅打印一次。一般用於顯示所有數據的合計信息。
欄首(ColumnHeader):顯示在每頁數據源的上部,它在每頁均顯示。因此一般用於打印數據源字段的欄目信息。
欄尾(ColumnHeader):顯示在每頁數據源的下部,它在每頁均顯示。一般可用於統計顯示每頁數據的頁合計信息。
分組頁眉(GroupHeader):用於顯示分組數據,在每一個分組開始顯示。
分組頁腳(GroupFooter):與群組首一一對應。一般用於顯示分組數據的統計信息。
頁腳(PageFooter):顯示在每頁的最底部。一般用於打印頁序等信息。
三.常用功能
1.添加報表欄
將光標置於“設置報表攔”彈出“段編輯器”,再選擇添加或刪除段。
添加段的時候要注意:
1)選擇添加段的位置,如想添加子數據區,則選中要添加父數據區,點擊添加“數據區”即可,如圖所示:
2)若添加的數據區與原數據區平級,任選段(除數據區外),點擊添加“數據區”即可,如圖所示:
2.添加數據源
選擇菜單欄的“數據”,在下拉框中選中“選擇數據源”,彈出“選擇報表數據”框,里面會列出已經傳出的數據源,勾選需要的數據源,點擊確定,此時界面右邊“數據”列表中即顯示當前所選中的數據源,選中數據源,右鍵選擇“查看數據”,即可顯示當前數據源中所含有的數據:
3.添加系統變量
對於部分變量可能取自當前系統,如時間,頁碼,序號等,此時選擇系統變量中相應的變量即可,如圖:
4.添加匯總
對於一些報表,需要在數據尾添加合計行,此時需要手動添加合計,彈出匯總項編輯器,再在匯總項編輯器中添加匯總數據源。
在匯總名稱一欄可以自命名一個合計名稱;
在“數據列或公式”中可以選擇匯總的數據源;
在“計算段中每一列”可以選擇參與匯總的數據區;
在“計算滿足下面條件的行”中可以做過濾,在寫total時會出現計算某種類型的和,比如計算總人次分在職和退休之和,此時在寫total時就需要寫限制條件進行過濾。如[Table1.GRXZ]=="1";如圖:
5.添加過濾、排序、分組
雙擊數據區,彈出“編輯數據段”,可以進行數據源的選擇、排序、過濾。如圖:
四.常用屬性
1.頁面設置
用於顯示總的頁數(TotalPages),例如:頁腳顯示 第1頁/共20頁。系統第一遍掃描報表時計算出TotalPages,然后第二遍實際生成報表。如果不使用Double pass,則TotalPages返回0,所以必須設置report的屬性doublepass為true;
設置方法:點擊報表樹,單擊報表樹最頂端圖標,點擊屬性,選擇doublepass為true;也可直接在屬性框中選擇report,進行相關屬性設置!如圖:
2.打印設置
對於套打模板,樣式在紙張上已經固定了(如處方箋、收費發票),只需要按照原定的樣張將數據填充進去,在繪制的時候,需要用直尺良好尺寸,為了能夠有一個更好的效果,一般把頁面上已經存在不需要再打印出來的也畫出來,但是需要設置屬性“printable”為false:表示打印不顯示,若想在預覽的時候就不要看到那些不需要打印的,則需設置屬性“Visible”為false:表示預覽不顯示。
3.格式設置
報表中有的數據需要按照規定的格式去顯示,如需要把時間的格式改變一下,選中當前數據,右鍵單擊,點擊format(或在屬性欄中選擇format),在彈出的選擇格式框中選擇需要的格式。若format中沒有需要的格式,則需要在custom中自定義,比如我需要把時間設置為2012-09-09 11:22:23,此時可以在custom中填時間顯示格式:yyyy-MM-dd HH:mm:ss。注意有的需要顯示上午還是下午,表示上午下午的格式是tt,具體相關設置可以參照已存在的format進行編輯!如圖:
4.顯示設置
對於有些數據,名稱較長,在行高固定的情況下,系統默認為自動換行,此時兩者均不能完全顯示不能完全顯示,比如,此時按照客戶的需求,若要求自動截斷,則設置“WordWrap”為false(即不自動換行),若要求全部顯示,則需要讓該數據有按照單元格大小自動縮放功能,設置屬性“AutoShrink”為fontsize或者fontwith。
5.邊框設置
邊框可以通過工具欄設置,此時設置邊框是根據外界框的大小來顯示,下邊框的設置也可以通過設置下划線,此時下邊框的長度是根據數據顯示的長度來決定,還可以設置屬性“underline”為true,此時也是根據邊框的大小來顯示的。
6.表格設置
1)表格的行列數:通過屬性設置ColumnCount(列)和RowCount(行)設置。
2)合並/分割單元格:選中需要合並/分割的單元格,右鍵單擊,選擇“合並單元格”/“分割單元格”,如圖:
3)插入行列:選中某行、某列,右鍵單擊,選擇需要插入的位置,如圖:
五.常用代碼
1.在文本編輯器中編寫
Fastreport軟件自身帶了很多功能實現數據的轉換,直接在編輯框中即可實現。
常用的功能有:
選擇語句IFF;控制語句Switch;
截取字符串語句SubString,在text列表中選擇SubString
截取時間語句Date&Time:
算數運算語句Mathematical:常用的有Abs(取絕對值)。
注意,在運用這些function的時候,在文本編輯器右下角會顯示當前功能的用法規則,如圖:
若當前數據類型不滿足規則,則需要利用上面的轉換語句,將其轉換成與規則相符的數據類型,才能利用這些function,否則會報錯。
2.在code區編寫
有些數據的轉換在編輯器中不能直接實現,需要在code區域編寫代碼。寫代碼之前需要定義到相應的事件上:選中需要寫代碼的數據所在的報表攔,在屬性設置中點擊,在事件中雙擊需要用到的事件,自動跳轉到code區,且會出現一行代碼,類似於private void GroupHeader1_BeforePrint(object sender, EventArgs e)
{
}
報表中常用事件有BeforePrint,AfterPrint。
3.常用代碼
1)Data1.InitDataSource();//數據初始化,用於數據跑兩遍
2)有的需要把年月日進行分離顯示,此時需要選取時間並選擇只顯示時間的某部分,比如某個DateTime2類型的參數值為20120919,現需要將其年月日分開,分別以__年__月__日顯示,需要利用fastreport提供的功能進行分離,即1中的方法,但是注意此種方法只能用於數據類型為datetime的數據;對於非datetime型的數據,可以寫代碼取位數或者進行強制轉換,以string為例:
private void ColumnFooter1_BeforePrint(object sender, EventArgs e)
{
string tbrq= ((String)Report.GetColumnValue("Table1.TBRQ"));
if (!String.IsNullOrEmpty(tbrq))
{
Text9.Text = tbrq.Substring(0,4) + "年" + tbrq.Substring(4,2) + "月"+tbrq.Substring(6,2)+"日";
}//字符串型用SubString,Substring(0,4)表示從第0位開始,取出四位作為年。
3)小數位的控制:可以用format對所有數據的小數位進行控制,但只對於數值型的數據才有效,但是對於string型的則需要用語句進行實現,如:
decimal sl= ((Decimal)Report.GetColumnValue("dtfee.Quantity");
Cell51.Text=sl.ToString("0.00");// "0.00"若不填則按照默認值顯示,后面多少個零顯示出來的數據即為有多少個小數;對於數量,有時要求要求有小數時則顯示小數,無小數時則顯示整數,此時只需要將"0.00"改為"0.##"即可,##的個數也是可以自定義的,表示顯示的最多的小數位。
特殊功能匯總
一.打印中實現空表格填滿剩余的空行,達到指定的行數。
1.單頁顯示指定行數
為了能讓數據在未填滿的前提下,該頁也能顯示指定的行數N,需要在數據區(data)添加子報表(child),且需要設置其屬性最少數據行(CompleteToNRows)為N。
2.按照數據行數顯示指定行數
按照1的設置,預覽的時候會發現該操作只會控制首頁滿足條件,當數據的行數超過一頁時,后面頁均按照有多少數據顯示多少行,此時需要寫代碼控制。
如:
private void PageHeader1_AfterPrint(object sender, EventArgs e)
{ if (Engine.FinalPass)
{
Child1.CompleteToNRows = ((Int32)Report.GetVariableValue("TotalPages")) * 20;
}//按照總頁數*20來控制CompleteToNRows。
}
此時報表攔中的child區CompleteToNRows設置為1,如圖:
二.本頁合計和本期合計
1.本頁合計
在每頁均會顯示,且統計當前頁相關數據的和。此時勾選“打印后重置”項,再將合計項移到相應的位置即可。如圖:
2.本期小計
在每頁均會顯示,但是指在數據的最后一頁顯示合計的數據,統計當前報表的所有數據和;需要寫total來計算當前值,只是本期小計中打印后重置這個屬性不勾選,由於本期小計只在最后一頁顯示數據,其他頁面上數據區均為空,需要代碼控制,例如:
private void ColumnFooter1_BeforePrint(object sender, EventArgs e)
{
if(((Int32)Report.GetVariableValue("Page"))!=((Int32)Report.GetVariableValue("TotalPages")))//設置顯示本期小計需要的條件,即當前頁與總頁數相一致的時候,開始顯示數據,否則為空。
三.交叉表的用法 (演示)
參照模板 收費員結賬匯總報表.frx
注意交叉表的行列寬度不需設置,自動按照數據長短進行設置。
四.套打模板(演示)
參照模板 門診掛號發票(套打).frx,處方箋(綜合).frx
掛號發票的模板
注意,在周浦項目中,由於處方箋模板不一樣,在醫生工作站會根據選擇調用不同的模板,此時是將幾種不同的模板組合在一塊,再根據標志調用相應的模板。
五.超鏈接模板(演示)
報表&單據導入
一. 單據導入
單據即由開發直接傳入數據源,在模塊中實現單據的繪制。
步驟:找到相對應的模塊,點擊打印,進入空白模板,再進行設計。對於已經繪制好的模板,可以直接導入,但注意,必須在本地把數據源清空,再導入,否則將會出現data區重復,導致命名出現異樣,如data11。
有些模板即使清空數據源導入到模板,仍然會報錯,則需要重新新建一個模板,再將原模板的東西復制進去即可。
相關聯的表有:select * from Common.ReportTemplate
二.報表導入
報表即由存儲過程實現,然后再對應到相應的存儲過程,去存儲過程中的數據。
步驟:報表管理à新建報表à填寫相應的信息后保存(演示)à繪制模板
注意:填寫信息時要綁定正確的存儲過程,同時通過前台改變相應的界面顯示效果。
添加數據源:選擇sql,再選擇相應的存儲過程,確定即可,對於新建的模板,模板一欄不需要選擇,若選擇了則會調用以前存在的模板,同時改動的話也會影響以前的模板。
相關聯的表有:
select * from Common.Report
select * from Common.ReportDataSource
select * from Common.ReportTemplate
select * from Common.ReportFolder
select * from Common.ReportParameter
說明:fastreport自身帶有Demo,里面很多功能都是可以供大家學習參考的。