原創|其它|編輯:郝浩|2012-09-17 16:28:30.000|閱讀 447 次
概述:用戶可以在ActiveReports的Sample中找到Annual Report,大家可以通過運行此用例,配合以下文字介紹,學習到如何使用子報表,區域屬性,以及圖表控件來快速的建立一個年度報表。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
用戶可以在ActiveReports的Sample中找到Annual Report,大家可以通過運行此用例,配合以下文字介紹,學習到如何使用子報表,區域屬性,以及圖表控件來快速的建立一個年度報表。以下按照Solution Explorer窗口里的文件逐個介紹。
1. 年度報表(主報表)
以下介紹的是主報表的建立, 此年度報表分為三頁, 縮影如下圖。
a) 報表頁眉區域(第一,二頁)
在這次介紹的示例中, 我們的報表頁眉區域分為兩頁。 這里通過使用PageBreak控件將ReportHeader分成兩頁, 并且將ReportHeader區域的NewPage屬性設置為After. 另外, 這個報表會告訴用戶可以使用Label的BackColor和ForeColor屬性建立需要區域視覺分辨性強的報表。
這個報表的ReportHeader區域安插了SubReport控件, 在ReportStart事件里, 使用程序編譯連接至ProductSalesByCategory報表。
建議在ReportStart事件中初始化報表, 而并非是在每個區域的Format事件。
CSharp:
private void AnnualReport_ReportStart(object sender, System.EventArgs eArgs)
{
//Set subreport control's Report property to a new report instance
this.srptTop10.Report = new Top10();
this.srptProductSales.Report = new ProductSalesByCategory();
}
VB:
Private Sub AnnualReport_ReportStart(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.ReportStart
'Set subreport control's Report property to a new report instance
Me.srptTop10.Report = New Top10()
Me.srptProductSales.Report = New ProductSalesByCategory()
End Sub
ReportHeader區域右半部分黃色背景的, 使用的是Shape控件, 通過BackColor屬性設置顏色。 左半邊則使用了Picture控件。
b) Detail Section 明細區域(第三頁)
明細區域包含兩個SubReport控件,分別連接為Top10Customers和Top10Products報表。通常,在很多報表中,明細區域會運行很多次;但在此報表中,明細區域只有Label,而并無綁定的數據,因此只會運行一次。這樣的話,兩個子報表就可以在ReportStart事件中被初始化。
注意:請將ReportFooter區域的是Height屬性設置為0. 這是因為,除了明細區域,頁眉頁腳區域在一頁中是同時出現的,如果不想使用頁腳,則需要將其高度設置為0,而并不能夠單獨刪除頁腳。
c) GetDBPath 獲取數據源
對于數據庫的連接,在論壇上知識庫與精華區“ActiveReports 6.0產品使用指南 (2)快速綁定數據源 ”中有詳細的介紹。這里的示例使用的數據庫依然為NorthWind。
2. ProductSalesByCategory報表
這可以是一個單獨的ActiveReport,但在這個年度報表示例中被使用為SubReport,其放置的區域為ReportHeader區域(第二頁報表的左下角)。
CSharp:
private void ProductSalesByCategory_DataInitialize(object sender, System.EventArgs eArgs)
{
//Create dynamic datasource using sample database
DataDynamics.ActiveReports.DataSources.OleDBDataSource _ds = new DataDynamics.ActiveReports.DataSources.OleDBDataSource();
_ds.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" + GetDBPath.GetPath() + @"\nwind.mdb";
_ds.SQL = "SELECT DISTINCTROW Categories.CategoryName, Sum([Order Details Extended].ExtendedPrice) AS ProductSales FROM Categories INNER JOIN (Products INNER JOIN (Orders INNER JOIN [Order Details Extended] ON Orders.OrderID = [Order Details Extended].OrderID) ON Products.ProductID = [Order Details Extended].ProductID) ON Categories.CategoryID = Products.CategoryID WHERE (((Orders.OrderDate) Between #1/1/95# And #12/31/95#)) GROUP BY Categories.CategoryName ORDER BY Categories.CategoryName";
this.DataSource = _ds;
}
private void Detail_Format(object sender, System.EventArgs eArgs)
{
// Check _iRow value to see if we need to highlight the row or not.
if(this._iRow%2 == 0)
this.Detail.BackColor = Color.LightYellow;
else
this.Detail.BackColor = Color.Transparent;
this._iRow++;
}
VB:
Private Sub ProductSalesByCategory_DataInitialize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.DataInitialize
'Create dynamic datasource using sample database
Dim _ds As New DataDynamics.ActiveReports.DataSources.OleDBDataSource()
_ds.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" + GetDBPath.GetPath() + "\nwind.mdb"
_ds.SQL = "SELECT DISTINCTROW Categories.CategoryName, Sum([Order Details Extended].ExtendedPrice) AS ProductSales FROM Categories INNER JOIN (Products INNER JOIN (Orders INNER JOIN [Order Details Extended] ON Orders.OrderID = [Order Details Extended].OrderID) ON Products.ProductID = [Order Details Extended].ProductID) ON Categories.CategoryID = Products.CategoryID WHERE (((Orders.OrderDate) Between #1/1/95# And #12/31/95#)) GROUP BY Categories.CategoryName ORDER BY Categories.CategoryName"
Me.DataSource = _ds
End Sub
Private Sub Detail_Format(ByVal sender As Object, ByVal e As System.EventArgs) Handles Detail.Format
' Check _iRow value to see if we need to highlight the row or not.
If Me._iRow Mod 2 = 0 Then
Me.Detail.BackColor = Color.LightYellow
Else
Me.Detail.BackColor = Color.Transparent
End If
Me._iRow = Me._iRow + 1
End Sub
3. StartupForm 起始表格
這個表格使用了ActiveReports的Viewer控件。 將Viewer的Dock屬性設置為Fill,表格在運行時便會自動調整大小。 用戶可以右擊選擇ViewCode來查看程序。
4. Top10Customers報表和Top10Products報表
Top10Customers和Top10Products兩個報表都各自只有兩個區域,即GroupHeader和Detail。請將兩個報表的PrintWidth屬性設置為3.135 inches, 這樣兩個報表的大小正好合適于主報表。
這兩個子報表的GroupHeader區域都被Chart控件填充著。大家可以點擊圖表,查看一下這個圖表屬性的設置。在屬性窗口的下方,點擊藍色的Data Source,圖表綁定的數據源窗口會彈出,在Query框中,可以查看到如何選擇前10位的SQL語句。對于如何在ActiveReports中建立圖表,我們會在下一個主題中詳細介紹)。
在每個子報表的明細區域,設置兩個TextBoxes和一個Label控件, 可以右擊,選擇ViewCode來查看如何設置數據源, 傳遞數據到圖表上, 以及交替設置明細部分的背景色, 以及如何設置Label的Text屬性。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:Grapecity