DevExpress之XtraReport 學習筆記


XtraReport

一、基本概念:

XtraReports 中的每個報表都由 XtraRepot 類的一個實例表示,或者由該類的子類來表示(這種情況更常見)。 因此,每個報表都作為帶區的容器使用,而每個帶區中都包含報表控件。XtraReports 中的每個報表都可以被綁定到數據,或者不綁定。 要創建綁定報表,則首先要把報表綁定到數據源,然后指定每個報表控件的數據綁定選項。報表控件、帶區 和報表自身的所有大小和位置,都以報表內相同的單位度量。 度量單位由報表的 XtraReport.ReportUnit 屬性指定,可以設置為下列類型之一:百分之一英寸:當 ReportUnit 屬性值被設置為 ReportUnit.HundredthsOfAnInch 時使用。 十分之一毫米:當 ReportUnit 屬性值被設置為 ReportUnit.TenthsOfAMillimeter 時使用。

二、頁面構建時用到的事件

Before Print

在 預覽/打印/導出 報表期間,在 XRControl 對象創建其圖像之前,XRControl.BeforePrint 事件發生,主要用於以程序方式改變報表的屬性、帶區的屬性、以及存放在 DetailBand 細節帶區中的控件的屬性。

 

在此事件中可以執行大部分任務 (例如改變 XRControl.Visible、XRControl.BackColor、XRControl.BorderColor 以及其他屬性),可以被輕松執行,而 無需編寫代碼,只是使用 格式設置規則。 此外,BeforePrint 事件可以被接管,從而重新指派控件的樣式,並且調整其 XRControl.LocationF 屬性。

 

BeforePrint 事件中,可以使用 XtraReportBase.GetCurrentColumnValue 方法為數據綁定控件獲取數據列的當前值。 注意,在此事件中,修改控件的綁定信息就太遲了。 因此,對於數據綁定控件,可以只調整其靜態文本。

示例代碼:

private void xrLabel1_BeforePrint(object sender, PrintEventArgs e)

{

    if (Convert.ToDouble(this.GetCurrentColumnValue("UnitPrice")) > 30) {

        XRControl control = this.FindControl("xrLabel1", true);

        control.LocationF = new PointF(15F, 15F);

        control.Styles.Style = this.StyleSheet[0];

     }

}

 

三、報表結構

整個報表是由多個綁定帶區組成,綁定帶區如下:

綁定帶區

說明

TopMarginBand

每個頁面上面都顯示的空白(天頭),在PageHeaderBand或者ReportHeaderBand上面

ReportHeaderBand

在報表起始位置(報表頭), 此帶區被設計用於顯示某些概述信息,例如報表的封面。

PageHeaderBand

在每個頁面的上方(頁眉),在TopMarginBand或者ReportHeaderBand下方

GroupHeaderBand

在每組的起始位置,或者在分跨多個頁時而位於組的上方(分組標頭)。 此帶區指定分組標准,並被用於顯示每組記錄起始位置的信息

DetailBand

在頁面上所有其他帶區之間(細節)。 此帶區每行只顯示綁定數據源中的一條記錄,或者當沒有為報表指定數據源時而簡單地持有非綁定控件。

DetailReportBand

在DetailBand的下方(從表),被設計用於在創建主/從報表時持有從報表

GroupFooterBand

在每組的結束位置,或者在分跨多個頁時而位於組的下方(分組腳注)。   此帶區主要被設計用於顯示每組的總結信息。

ReportFooterBand

在報表結束位置(報表腳注)。 此帶區被設計用於顯示某些終極信息,例如報表總結。

PageFooterBand

在每個頁面的下方(頁腳)在ReportFooterBand下方和BottomFooterBand上方,此帶區被設計用於從之前頁面接續的頁碼或表尾

BottomMarginBand

每個頁面底部的空白(地腳),在PageFooterBand的下方。

 

四、報表常用屬性

屬性

說明

BackColor

設置報表控件的背景色

Bands

報表包含的帶區,用於放置各種控件(集合)

BorderColor

報表中控件邊框顏色

BorderDashStyle

報表中控件邊框樣式

Borders

報表中控件邊框

BorderWidth

邊框寬度

CalculatedFiled

計算字段,主要被用於 data-aware(數據感知) 報表中(集合)

DataAdapter

數據源Adapter對象

DataMember

數據源中用於綁定報表的具體表

DataSource

報表數據源

DataSourceSchema

指定數據源框架文件(XML/XSD文件)

 

DesignerOptions

ShowDesignerHints(bool):設計時顯示提示

ShowDesignerWarnings(bool):設計時顯示警告提示

ShowPrintingWarnings(bool):打印提示

DetailPrintCount

設置打印的頁數

DetailPrintCountOnEmptyDataSource

當數據源為空時打印的次數

DrawGrid(bool)

設置是否要繪制對齊網格

ExportOptions

用於設置報表導出時的相關屬性(集合)

FilterString

報表數據過濾字符串

PageColor

報表頁面顏色

FormattingRules

設置格式化樣式

FormattingSheet

格式化樣式集合

PagerKind

設置紙張類型

Parameters

設置報表參數

PrintOnEmptyDatasource(bool)

設置當數據源為空時是否打印

RequestParameters(bool)

設置是否在參數Submit后再創建報表

SnapGridSize

設置報表對齊網格大小

SnappingModel

設置對齊模式(SnapToLines&SnapToGrid)

SnapToGrid(bool)

設置是否對齊到網格

StyleSheet

設置控件引用的樣式

StyleSheetPath

設置引用外部樣式文件

TextAlignment

設置報表字體對齊方式

Watermark

(屬性集合)用於設置報表的水印,包括圖片和文字

XmlDataPath

設置數據源為Xml文件的數據源路徑

 

五、報表控件

報表控件在Web應用程序中分為Web頁面控件和報表設計控件

1.Web頁面控件

控件

說明

ReportDocumentMap

用於在Web頁面顯示報表中的書簽,需要指定該控件的ReportViewer屬性。

ReportParameterPanel

用於Web頁面傳遞參數給報表,需要指定該控件的ReportViewer屬性。

ReportViewer

用於Web頁面呈現報表,需指定該控件的Report屬性為要顯示的報表實例。

ReportToolbar

與ReportViewer控件配合使用,實現翻頁,打印,導出等功能。

 

2.報表設計時控件:

 

控件

說明

XRLabel

標簽控件,允許把單行或多行文本插入到報表中。此文本可能是靜態的,也可能是動態綁定。

XRCheckBox

復選框控件,被設計用於在報表中顯示 True/False 或   選中/未選中/不確定   狀態。

XRRichText

富文本控件,被設計用於顯示、輸入和操作設置格式的文本。

XRPictureBox

圖片框控件,用於顯示報表中的圖像。

XRPanel

面板控件,可以包含其他報表控件。

XRTable

表格控件,用於插入表格 (包括行和單元格)。

XRLine

線條控件,用於在報表中繪制垂直線、水平線或斜線。

XRShape

形狀控件,用於把簡單的圖形嵌入到報表中。

XRBarCode

條形碼控件,允許把許多不同的條形碼類型插入到報表中。

XRZipCode

郵政編碼控件,允許把表示郵政編碼的數字插入到報表中。

XRChart

圖表控件,可以用於以圖形視圖呈現數據。

XRPivotGrid

透視網格控件,用於以交叉表的形式呈現下層數據源中的數據,從而創建交叉表報表。

XRPageInfo

顯示某些輔助信息的控件。 使用此控件可以在報表中顯示頁碼、當前日期或用戶信息。

XRPageBreak

分頁符控件,用作標記報表應開始新頁面。

XRCrossBandLine

可以跨多個帶區的線條控件。

XRCrossBandBox

可以跨多個帶區的方框控件。

XRSubReport

子報表控件,用於顯示子報表。

 

六、報表類型

  1. 靜態報表 是簡單呈現某些靜態信息的報表。 這種報表通常不綁 到數據源,並且在一頁上顯示單個控件或一組控件。如果需要多次重復相同的報表內容,那么使用 XtraReportBase.DetailPrintCount 屬性。
  2. 表格報表 是以表格形式呈現信息的報表。 這些信息被存儲在報表的綁定數據源中(也可以運行時從數據庫中讀取),並且通常此數據源不分層級 (例如,只包含一個數據表)。使用 XRTable 控件,並且綁定表格的單元格來呈現數據源中的數據;
  3. 主從報表如果某個報表被用於顯示分層級的數據源中的數據,則通常把它稱為 主/從 報表。創建主/從報表的兩種主要方法。 第一種方法: 是以使用 從報表帶區為基礎(使用DetailReportBand帶區),當數據源包含主實例和從實例之間的 ADO.NET 關系時,使用這種方法使用。 第二種方法:是創建兩個不同的報表類,並且把從報表作為子報表而合並到主報表中(使用XRSubReport控件,指定此控件的ReportSource屬性為子報表)。
  4. 多欄報表 是以多個列或行 (取決於當前的多欄設置) 呈現數據的報表。 這種報表是有用的,例如,當每個細節帶區都只顯示少量數據、並且需要在一列的右側打印下一個細節帶區的外觀時,這樣就能充分利用整個頁面寬度。 此外,當創建有相同內容的 卡片或郵寄地址簽、並且需要在許多報表頁面上打印大量相同尺寸的卡片時,多欄報表也是有用的。

由於多欄布局主要影響報表的細節帶區,因此可以通過 Detail 帶區的 DetailBand.MultiColumn 屬性來指定多欄模式。 要啟用多欄模式,則把 MultiColumn.Mode 屬性設置為除去 None 之外的其他取值

欄數固定,欄寬度相同並且被自動計算。
為此,應該把 MultiColumn.Mode 屬性設置為 MultiColumnMode.UseColumnCount,並把 MultiColumn.ColumnCount 屬性設置為所需的欄數。

自動計算欄數,所有欄的寬度都是相同的固定寬度。
為此,應該把 MultiColumn.Mode 屬性設置為 MultiColumnMode.UseColumnWidth,並且把 MultiColumn.ColumnWidth 屬性設置為所需的欄寬度。

  1. 交叉表報表 是以交叉表形式呈現信息的報表。 交叉表 (或透視表) 類似於簡單的普通 數據綁定表格,但是改為在單個表格中呈現多維的分層級的信息,並含有每行和每列的自動排序、計數、合計和累計。使用XRPivotGrid控件,並為此控件指定數據源、綁定字段到列,同時要保證報表的數據源為NULL,如果兩者使用相同的數據源,那么XRPivotGrid控件將被打印與數據源行數相同的次數。
  2. 6.      並列報表在報表中顯示兩欄相同的或者不同的信息,主要依賴於XRSubReport控件。
  3. 7.      Drill-Through 報表類似於主從報表,但是子報表是通過超鏈接來訪問的。超鏈接的設置將在下面數據綁定部分介紹。
  4. 8.      郵件合並報表試圖創建 e-mail 模板時,經常會遇到困難。 在這些模板中,某些文本是不變的,某些字段 (通常被使用預定義的標記括起來) 應該在創建文檔時填充來源於數據庫的數據。 此項功能也被稱為 郵件合並,並且使用 XtraReports 可以輕松實現。

大體上,要創建嵌入字段,則需要把由 [中括號] 括起的數據字段名稱插入到控件的文本中,如果在當前的數據上下文中,字段是有效的,那么當報表被預覽或導出時,它將被替換為一個適當的數據值。

  1. 9.      標簽報表此報表與多欄報表相類似。

七、報表數據源

1.數據源

通過 XtraReport 對象的 XtraReportBase.DataSource 屬性把它綁定到數據源,而與特定的數據源類型和所使用的數據綁定方法無關。 唯一的例外是當使用 XML 數據源時,需要指派到 XtraReportBase.XmlDataPath 屬性,同時要求把 XtraReportBase.DataSource 屬性設置為 null

2.綁定數據的方法

2.1.使用 .NET 數據提供程序綁定報表

這種方法意味着數據被存儲在數據庫中。 使用已提供的兩種數據適配器組件之一,就可以把報表綁定到這種數據:

OleDbDataAdapter,使用 OLE DB 訪問公開的數據源;

 SqlDataAdapter,被設計用於使用由 Microsoft SQL Server 7.0 或后續版本提供的數據源。

這些數據適配器都使用連接對象來綁定數據,並且能夠生成包含數據表的 DataSet 對象。 然后通過把數據表 (或綁定到表的數據視圖) 直接指派到 XtraReportBase.DataSource 屬性,它們就可以被綁定報表。 也可以把生成的 DataSet 對象指派到 XtraReportBase.DataSource 屬性,並且使用 XtraReportBase.DataAdapter 屬性來指定數據適配器的名稱。

2.2.把報表綁定到 List

在運行時刻創建的數據對象必須支持 IList、ITypedList 或 IBindingList 接口,並且被指派到 XtraReportBase.DataSource 屬性。 注意,你不需要創建自定義的數據源對象。 例如,可以在運行時刻使用填充了數據的 DataTable 對象。

2.3.把報表綁定到 XML 數據

這種方法使用存儲在 XML 文件中的數據。 可以以兩種方式之一來訪問這種數據。把 XtraReportBase.DataSource 屬性值設置為根據 XML 文件創建的數據集; 直接把 XML 文件指派到 XtraReportBase.XmlDataPath 屬性。

八、數據綁定與報表預覽

1.設計時綁定

在設計時綁定數據源,需要把相應的數據源添加到應用程序中,即在應用程序中添加DataSet程序集,然后在報表設計界面,把報表的數據源指定到相應的數據集上,打開Field List字段列表,將相應的字段用鼠標拖到相應的控件上即可。點擊Preview 即可預覽報表。

2.運行時綁定

在運行時綁定數據源,更具靈活性,它可以根據需要從數據庫中讀取有用的數據來呈現在報表上。對於運行時綁定數據源,其數據綁定操作要在報表的構造函數中完成。在報表設計器中只需把相應的控件放置好即可。報表控件中都有一個DataBindings屬性,此屬性的Add方法可以把數據綁定到控件上。

示例代碼:

Void DataBind()

{

DataSource=tb   // tb為DataTable

xrLabel1.DataBinds.Add(”Text”,null,”Column1”);

xrLabel2.DataBinds.Add(”Text”,null,”Column2”,”FormatString:{0}”);

}

在報表的構造函數中調用以上方法就可以將數據綁定到xrLabel上,其中Add方法有兩個重載:

Control.DataBinds.Add(控件屬性,數據源,綁定字段)

Control.DataBinds.Add(控件屬性,數據源,綁定字段,格式化設置)

每個控件可綁定的屬性可能有所不同,可以通過該控件的DataBinds屬性來查看。

3.Chart控件綁定

   Chart控件與PivotGrid控件都需要獨立指定數據源,同時,如果這兩個控件被放置Detail帶區中,報表不能指定數據源,不然,該控件將被顯示與報表數據源行數相同的次數。

   對與Chart控件的數據綁定,要把相應字段綁定到對應的Series上,ArgumentDataMember為X軸綁定字段,ValueDataMembersSerializable為Y軸字段。

   一個圖表中可以有多個Series,可以通過Series索引或者Name來找到相應的Series.Chart控件中Series集合表示圖表,Titles集合是對應Series的標題。

   示例代碼:

   protected void DataBind()

   {

   string sqlStr = "select UnitPrice,ProductName from ProductSales group by ProductName,UnitPrice";

   this.xrChart1.DataSource = helper.getDataTable(sqlStr);

   this.xrChart1.Series[0].ArgumentDataMember = "ProductName";

   this.xrChart1.Series[0].ValueDataMembersSerializable = "UnitPrice";

   this.xrChart1.Series[0].Name = "Price";

   this.xrChart1.Series[0].LegendPointOptions.PointView = PointView.Argument;

   his.xrChart1.Legend.Visible = false;

   }

 

九、數據呈現

由於數據源提供方式分為設計時與運行時,所以數據呈現也有所不同。對於運行時提供數據源的報表,分組、排序都需要通過代碼添加到報表中,而設計時提供數據源則可以直接通過圖形化界面進行設置。

1.數據分組與排序

運行時分組需要在數據綁定函數中加入如下代碼:

this.GroupHeader1.GroupFields.Add(new GroupField("StudentID",XRColumnSortOrder.Descending));

GroupField的兩個參數分別為分組字段,排序方式。

2.數據篩選

2.1.在報表級篩選

在報表中添加Parameters屬性中添加篩選參數,並設置篩選條件,在Web頁面上Parameters中的參數列表將被顯示在ReportParameterPanel控件中,報表中添加參數以后,默認狀態預覽報表需要點擊Submit后報表才被創建,若要不提供參數也創建報表,需要將報表的RequestParameters屬性設置為false。

2.2.在數據源級篩選

在數據級篩選數據,主要是通過SQL語句的where條件,要將Where條件的參數傳遞到報表類中,可以通過報表的構造函數,其他方式有待研究。同時結合在報表級的數據篩選,可以方便點的在頁面上呈現出需要的數據。

 

3.數據格式化

通過控件的FormatString屬性可以根據需要設置相應的格式化輸出樣式。通過控件的Summary屬性來設置各種統計功能。

 

十、外觀設置

1.外觀屬性

外觀屬性如下表:

 

屬性

說明

BackColor

獲取或設置報表元素及其子控件的背景色

BorderColor

獲取或設置報表元素及其子控件的邊框色。

BorderDashStyle

獲取或設置報表元素及其子控件的邊框虛線樣式。

Borders

獲取或設置報表元素及其子控件的可視邊框 (上、右、下、左)。

BorderWidth

獲取或設置報表元素及其子控件的邊框寬度。

Font

獲取或設置報表元素及其子控件的字體選項 (字體名稱、大小等)。

ForeColor

獲取或設置報表元素及其子控件的前景色。

Padding

獲取或設置用於繪制報表元素及其子控件內容的縮進量。

TextAlignment

獲取或設置報表元素及其子控件的文本對齊方式。

 

2.樣式

2.1奇偶行樣式

它允許在視覺上把報表中連續的數據字段划分開,從而有更好的可讀性。 要把這些樣式應用於控件,則應該使用其 XRControl.OddStyleName 和 XRControl.EvenStyleName 屬性。

2.2.樣式表

在設計時刻可以使用 Styles Editor(樣式編輯器) 來管理報表的樣式表、定制樣式表、存儲到文件以及從文件中加載。 因此,可以創建多個樣式表,並且在設計時刻或運行時刻加載。保存報表的樣式表的方式有兩種。 第一種方式是保存為外部文件 (有 REPSS 擴展名),然后使用 XtraReport.StyleSheetPath 屬性,以只讀模式加載到報表 (這種方式在 如何: 創建和存儲報表樣式表 主題中進行了描述)。 第二種方式是把樣式表存儲在報表內 (使用 XtraReport.StyleSheet 屬性),因此可以按照需要進行修改,並和報表本身一起被保存。

3.附條件格式設置

通過控件的FormattingRuls屬性設置格式化規則,當滿足該規則時,將以定義的樣式顯示該行數據。同一個報表的FormattingRules被放置在FormattingRulesSheet屬性中。

十一、交互導航

1.超鏈接

示例代碼:

為xrLabel添加超鏈接

xrLabel.DataBinds.Add(“NavigateUrl”,null,”Colunm”,”http://www.quantacn.com?id={0}”);

解釋:在報表已指定數據源的情況下(設計時或者運行時)可以用以上方法對控件綁定NavigateUrl屬性,同時格式化Url地址與要穿的的參數。

2.文檔地圖

在報表中若設置了Bookmark屬性,報表將生成文檔地圖,在Web頁面中用ReportDocumentMap控件來顯示。

示例代碼:

為xrPanel添加文檔地圖

xrPanel.DataBinds.Add(“Bookmark”,null,”Column”,”FormatString:{0}”);

十二、其他

不使用ReportToolBar來打印,導出報表。

步驟:

1.在web頁面設置ReportViewer控件的ClientInstanceName屬性(例如:viewer)

2.添加ASPxButton控件到web頁面

3.點擊ASPxButton控件的智能標簽,取消AutoPostBack,點擊Client-Side-Events;

4.在Click事件中添加如下代碼

   function(s, e) {

                viewer.SaveToDisk(‘PDF’); //保存為PDF格式

  viewer.Print(); //打印報表

}

十三、應用程序部署

Web應用程序發布之后,所應用的DevExpress中的dll文件不會被生成到應用程序下得Bin文件夾中,所以必須手動到Developer Express安裝目錄先的Source文件夾中把應用程序中所引用的dll文件拷到應用程序中的Bin文件夾中,然后再把應用程序部署到服務器上。否則,報表將不能正常顯示,還要注意一點,在設計報表時,不要指定打印機的類型,以免打印時出錯(網上有人遇到過此問題)。在本機將應用程序部署到IIS上,測試正常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM