FastReport.net 常用方法

來源:互聯網
上載者:User
之前說起過 FastReport.NET這款報表工具的使用,但當時主要是從程式的角度,樣本了在B/S架構下的相關使用,但報表終歸還是要划到設計的範疇裡來,畢竟能夠將報表的內容展示在客戶的眼前,這才是報表的根本目的,而諸如列印、轉換格式個人覺得應該算是錦上添花的功能吧。

  而隨著報表設計的複雜,問題自然也就增多了,沒辦法,硬著頭皮上官網下點文檔吧。

  這裡將遇到的一些小問題匯總如下,自己做個記錄,需要的朋友也可以省點“閱讀理解”的時間哈。。。

 

  一、版面設定

  情景:FastReport設計器頁面預設設定為A4紙,但如果需要顯示的欄位過多,這時就出現了頁面的大小無法滿足完整顯示所需內容的問題。

  解決:出現這個問題後,我們可以在來到"檔案"—"版面設定"選項中進行設定,在這裡可以直接調整頁面的紙張類型和尺寸,但是我使用的時候更多的會調整Portrait為Landscape,所謂Portrait按詞霸的翻譯就是“紙短的一邊在頂端和底端的列印方式”,而Landscape則恰恰相反,意思是“紙長的一邊在頂端和底端的列印方式”,可以簡單的理解Portrait為縱向,Landscape為橫向,通過這樣的調整既可以保證用標準的A4紙列印,又滿足了設計時能夠擴充紙張大小,保證顯示內容的目的。

  

  

  二、過濾或排序顯示資料

  情景:為了將資料按順序顯示,便於查看。

  解決:此時可以雙擊資料區,這時就會看到排序和過濾的選項,可以通過點擊後面fx表徵圖,使用設計器的方式實現,當然也可以手動添加代碼:

  

  三、添加和設定子報表

  情景:顯示複雜關係的資料。

  解決:進入"報表"--"設定報表欄",可以對報表進行各種設定,其中資料首隻會列印一次,資料尾則會在所有資料之後被列印。

  

  

  四、日期顯示

  情景:有些資料表裡的日期欄位是空的,這時FastReport會自動將其轉化為0001/1/1的形式。

  解決:此時如果想要讓日期為空白時不顯示此預設的形式,可以再次進入"報表"--"選項"中,在"一般"選項卡中取消勾選"轉換空值"即可。

  

  五、資料表的嵌套

  情景:複雜的資料庫表之間有很多複雜的主從對應關係,這時需要在資料來源中建立關係。

  解決:選擇動作--建立關係,然後就可以象在資料庫裡一樣建立主外部索引鍵關聯了。

  

  六、手動確定資料來源

  情景:有些時候SQL語句建立表的關係過於複雜,以至於很難建立良好的主從關係,比如我遇到的這樣的SQL查詢

  SELECT i.SheetKeyId,i.SheetId,i.OperatorName,
i.InCheckDateTime,i.OutCheckDateTime,i.OutCheckPeople,
s1.BranchName AS InBranchName,s2.BranchName AS OutBranchName
  FROM dbo.T_StorageBranch s1 , dbo.T_StorageBranch s2 ,
dbo.T_LeechdomIOSheet i , dbo.T_LeechdomIOSheet i2
  WHERE i.InBranchKeyId = s1.BranchKeyId
  AND i2.OutBranchKeyId = s2.BranchKeyId
  AND i.SheetId = i2.SheetId

  既有自表關聯,又有和其他表的關聯,那建立主從關係豈不要鬱悶死。。。

  解決:此時我的解決方案有兩種,一個是基於FastReport是支援表和視圖作為資料來源的,此時可以事先在資料庫中建立視圖,從而使用視圖作為資料來源解決此表的關聯問題,當然如沒有項目的需求,大可採用第二種方法,即點擊"添加SQL查詢",這是輸入我們的SQL語句,便會自動產生一個查詢結果,我們只需要在報表設計時用其作為資料來源就ok了。

  

  七、使用系統變數

  情景:我們經常會在報表列印時要求顯示當前的頁數,當前的資料量統計以及當前的列印時間等。

  解決:FastReport其實已經我們內建了所有這些功能,可以在系統變數中找到,只需要簡單的拖入Date就可以顯示出當前日期,拖入PageN就可以顯示頁碼等。

  

  八、使報表顯示時呈現常見的奇偶行變色效果。

  情景:資料量大時可以方便查看資料。

  解決:這裡同樣有兩種方法,一是在"報表"--"樣式"中添加一個樣式,叫做EvenRows,什麼樣式都不用設定,確定即可,然後單擊資料區,在外觀的EvenStyle屬性裡面選擇此樣式,最後改變Fill屬性的填充顏色即可。第二種方法是通過程式的方式來實現,代碼如下:

  private void Data1_BeforePrint(object sender, EventArgs e)

  {

    if (((Int32)Report.GetVariableValue("Row#")) % 2 == 0)

   Data1.FillColor = Color.Gainsboro;

  }

  這裡的Row#為系統內建變數,代表行號,我們選出偶數行後,設定FillColor為自己想要的顏色即可,但不可為window顏色,這樣就看不出效果了。

  九、使用程式操作報表

  情景:在表單程式中可以使用編程的方式對報表的相關欄位進行操作。

  解決:

    //擷取資料來源中列的值

    string productName = (string)Report.GetColumnValue("Products.Name");

    

    //擷取資料來源

    DataSourceBase ds = Report.GetDataSource("Products");

    //擷取系統變數值

    DateTime date = (DateTime)Report.GetVariableValue("Date");

    //擷取總計數

    float sales = Report.GetTotalValue("TotalSales");

    //擷取參數

    int myParam = (int)Report.GetParameterValue("MyParameter");

    //設定參數

    report1.SetParameterValue("EmployeeID", 2);

  十、備忘

  1、在FastReport中的變數都使用的是[DataSourceName.FieldName]的形式,凡是以這種形式表示的都需要從資料庫中讀取,而普通文本則需要[常值內容]這樣的形式就可以搞定。

  2、在FastReport中可以設定資料表的別名,這樣可以在多表關聯的時候使用別名與相關欄位對應。

  3、如果你還沒有心動的話,我貼幾張現成的基於Northwind資料庫的demo樣本看看吧。。。

  

  

  

  

  估計就說這麼多了,好用的東西大家一起分享哇。。。^_^

作者:Rocky翔
出處:http://www.cnblogs.com/RockyMyx/
本文著作權歸作者和部落格園共有,歡迎轉載,但請在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.