我的E文很差的,每次看到一堆E文就头疼,使用就干脆翻译了一点以备将来使用。
这是第5章,里面翻译的有很多问题的,有些我都没有按照原句翻译,只是翻译了一个意思,如果各位觉得对你有帮助,就支持一下吧!再次声明一点,我E问很差的,只是想到有些朋友可能跟我情况一样,所以才贴上来。另外希望一些英文高手看懂文章也能帮助一下我们啊!
第五章:绑定报表和分组
单一表和显示报表
最简单的报表类型是一个从纪录源中显示字段的列表,这个示例显示了用基本的绑定方法绑定到报表,报表是通过数据控件和连接控件的属性绑定。
1. 建立一个新的VB程序
2. 在From1中添加两个command按钮
3. 将两个按钮改名为cmdPrint和cmdPreview.
4. 添加ActiveReports至工程中
5. 为From1中的command按钮添加如下代码
Private Sub cmdPrint_Click()
ActiveReport1.printreport false
End Sub
Private Sub cmdPreview_Click()
ActiveReport1.show
End Sub
6. 在ActiveReport1中添加一个ADO数据连接控件
7. 连接Nwind.mdb(见第三章)
注:示例中使用的数据在Microsoft Visual Basic的目录中
8. 设置数据控件的Source属性为如下SQL语句
SELECT * FROM customers
8. 添加4个标签至PageHeader section,并且按照如下方式设置他们的属性
Name lblCustomer lblCity lblCountry lblPostalCode
Caption Customer City Country PostalCode
Height 270 270 270 270
Left 0 2970 5490 7380
Top 0 0 0 0
Width 2880 2430 1800 1800
10. 单击PageHeader section并且设置它的高度属性为285
11. 从弹出菜单中选择fields项,在打开的fields窗口中单击上面的刷新按钮
12. 从fields窗口中拖拽以下字段至detail section中:CompanyName ,City,Country,PostalCode
13. 设置它们的属性如下所示:
Name txtCompanyName txtCity txtCountry txtPostalCode
DataField CompanyName Country City PostalCode
Height 270 270 270 270
Left 0 2970 5490 7380
Top 0 0 0 0
Width 2880 2430 1800 1800
Alignment 0-Left 0-Left 0-Left 1-Right
14. 运行工程,并且单击窗口中的Preview按钮在报表中使用参数
这个示例示范了如何在报表的查询传中使用参数,参数允许报表根据用户指定的信息运行,设置的语法如下所示:
<%[Key Required]|[Caption Optional]|[Default Value Optional]%>
1. 还是继续上一个示例,在数据控件的source属性中做如下更改:SELECT * FROM customers WHERE customerID ='<%customerID|Enter Customer ID:|ALFKI%>'
2. 为报表添加如下代码,代码作用是当参数对话框被取消的后立刻关闭报表
Private Sub ActiveReport_PromptDialogClosed(ByVal Cancelled As Boolean)
If Cancelled Then
Me.Cancel
Unload Me
End If
End Sub
提示:参数对话框事件能够通过用户的输入来格式化参数
3. 保存并运行报表
当报表运行时,参数对话框将被打开,参数的默认值被显示在上面。
这是第5章,里面翻译的有很多问题的,有些我都没有按照原句翻译,只是翻译了一个意思,如果各位觉得对你有帮助,就支持一下吧!再次声明一点,我E问很差的,只是想到有些朋友可能跟我情况一样,所以才贴上来。另外希望一些英文高手看懂文章也能帮助一下我们啊!
第五章:绑定报表和分组
单一表和显示报表
最简单的报表类型是一个从纪录源中显示字段的列表,这个示例显示了用基本的绑定方法绑定到报表,报表是通过数据控件和连接控件的属性绑定。
1. 建立一个新的VB程序
2. 在From1中添加两个command按钮
3. 将两个按钮改名为cmdPrint和cmdPreview.
4. 添加ActiveReports至工程中
5. 为From1中的command按钮添加如下代码
Private Sub cmdPrint_Click()
ActiveReport1.printreport false
End Sub
Private Sub cmdPreview_Click()
ActiveReport1.show
End Sub
6. 在ActiveReport1中添加一个ADO数据连接控件
7. 连接Nwind.mdb(见第三章)
注:示例中使用的数据在Microsoft Visual Basic的目录中
8. 设置数据控件的Source属性为如下SQL语句
SELECT * FROM customers
8. 添加4个标签至PageHeader section,并且按照如下方式设置他们的属性
Name lblCustomer lblCity lblCountry lblPostalCode
Caption Customer City Country PostalCode
Height 270 270 270 270
Left 0 2970 5490 7380
Top 0 0 0 0
Width 2880 2430 1800 1800
10. 单击PageHeader section并且设置它的高度属性为285
11. 从弹出菜单中选择fields项,在打开的fields窗口中单击上面的刷新按钮
12. 从fields窗口中拖拽以下字段至detail section中:CompanyName ,City,Country,PostalCode
13. 设置它们的属性如下所示:
Name txtCompanyName txtCity txtCountry txtPostalCode
DataField CompanyName Country City PostalCode
Height 270 270 270 270
Left 0 2970 5490 7380
Top 0 0 0 0
Width 2880 2430 1800 1800
Alignment 0-Left 0-Left 0-Left 1-Right
14. 运行工程,并且单击窗口中的Preview按钮在报表中使用参数
这个示例示范了如何在报表的查询传中使用参数,参数允许报表根据用户指定的信息运行,设置的语法如下所示:
<%[Key Required]|[Caption Optional]|[Default Value Optional]%>
1. 还是继续上一个示例,在数据控件的source属性中做如下更改:SELECT * FROM customers WHERE customerID ='<%customerID|Enter Customer ID:|ALFKI%>'
2. 为报表添加如下代码,代码作用是当参数对话框被取消的后立刻关闭报表
Private Sub ActiveReport_PromptDialogClosed(ByVal Cancelled As Boolean)
If Cancelled Then
Me.Cancel
Unload Me
End If
End Sub
提示:参数对话框事件能够通过用户的输入来格式化参数
3. 保存并运行报表
当报表运行时,参数对话框将被打开,参数的默认值被显示在上面。
我们刚才使用报表做了第一个联系,下面我们来示范在ActiveReports中使用分组,报表能够通过GroupHeaders/Footers的DataField属性来设置分组,ActiveReports在一张报表中最多能嵌套32个分组。
注:ActiveReports在分组中并不做排序,它只是假设Recordset中早已对分组做好了排序,例如在这个示例中,在数据源中需要对Country进行排序。
1. 仍然使用先前建立的报表,选择数据控件并且修改它的source属性如下:SELECT * FROM Customers ORDER BY Country
2. 选择报表的Detail section.
3. 右击并且选择Insert中的Group Header/Footer
4. 选择新建的GroupHeader1section
5. 修改此section的属性如下
Name ghOrderGroup
DataField Country
Height 360
注:设置GroupHeader的DataField属性是因为ActiveReports的需要,这个将告诉ActiveReports对Country字段进行分组,当Country字段的值发生改变时,ActiveReports将开始建立一个新的组。
6. 选择新建的GroupFooter1 section
7. 修改此section的属性如下
Name gfOrderGroup
Height 270
8. 在ghOrderGroup section中添加一个控件,并且设置它的属性如下
Name txtGroupCountry
DataField Country
Height 360
Left 0
Top 0
Width 4230
Font.Size 12
Font.Bold True
9. 运行工程,单击Preview按钮,你就可以看到分组Country的报表分组和计算表达式
许多报表需要计算一些分组的基本信息,例如设置第一个字母名相同公司的所有产品的销售总和,这个在ActiveReports中只需设置GroupHeader的GroupValue属性就可以完成。
注:为了获得正确的分组数据,应该将分组字段排序。
继续完成上面的报表,我们可以很容易的转换为公司名分组
1. 修改数据控件的Source属性,并且按公司名排序:SELECT * FROM Customers ORDER BY CompanyName
2. 从GroupHeader中删除txtCountry
3. 删除ghOrderGroup的DataField属性中的内容
4. 插入一个标签至ghOrderGroup section,并且设置它的属性如下:
Name lblLetter
Caption "A"
Height 540
Left 0
Top 0
Width 540
Alignment 2-ddTXCenter
VerticalAlignment 1-ddTXMiddle
Font.Size 20
Font.Bold True5. 在FetchData的事情中加入如下代码
Private Sub ActiveReport_FetchData(EOF As Boolean)
If Not EOF Then
ghOrderGroup.GroupValue = Left(DataControl1.Recordset.Fields("CompanyName"), 1)
lblLetter.Caption = ghOrderGroup.GroupValue
End If
End Sub5. 运行工程,并且单击Preview按钮,然后你就可以看到报表通过第一个公司名分组的运行的情况。
统计字段能够添加到任何section中用以计算所有总和,个数,平均值和其他集合值,在section完成过后,统计字段将统计section包含的字段,并且打印它,一个右统计字段的section将会延迟到所有的计算完毕,这同样适用于统计字段放置在detail section的上面
统计字段计算依据时控件的Summary属性,当有一个新的detail纪录将更新统计字段。当字段放在detail section的上方时(ReportHeader, PageHeader或GroupHeader),details section被各个纪录不断的格式化,并且统计计算也被不停的更新。当所有的统计字段的纪录读取后,header section就被延迟的显示出来。
统计字段被如下控件的属性控制:SummaryType
指定那里的字段将被统计
所有的统计类型如下:
GrandTotal 计算整张报表中所有详细纪录的表达式
PageTotal 计算每页中总计值的表达式
SubTotal 计算每个统计分组中的总计值的表达式统计函数
使用统计的集合类将计算总和,统计函数可以设置Sum, Average, Count, Min, Max, Variance and Standard Deviation,另外,你可以用统计函数计算其他字段的Distinct值。
在字段值有许多重复的值,而统计只需要统计为单一值,这个时候Distinct统计是很有用处的,如下例,处理后将看起来象这样:
Order ID Date Amount
1001 5/16/97 3000
1001 5/30/97 -500
1001 6/15/97 -2500
1002 4/20/97 2550
1002 4/30/97 -2500
统计函数将计算5行纪录,可是一个SummaryDistinct对Order Id统计,只返回2条数据,其他distinct函数也一样。统计分组
在这个示例中,我们将计算各个组中customers的个数,我们将添加一个统计字段在gfOrderGroup section中
1. 打开先前的工程。
2. 设置gfOrderGroup section的高度为285
3. 添加一个标签至gfOrderGroup section并且设置它的属性如下
Name lblGFooter
Caption "Number of Customers"
Height 270
Left 0
Top 0
Width 2070
4. 添加一个文本框控件至gfOrderGroup section并且设置它的属性如下
Name txtCustomerCount
Height 270
Left 2160
Top 0
Width 1980
5. 设置txtCustomerCount的属性如下:
DataField CompanyName
SummaryFunc 2-ddSFCount
SummaryGroup ghOrderGroup
SummaryType 3-ddSMSubTotal
Alignment 1-ddTXRight
6. 运行工程,并且单击Preview,这样就可以看到新的报表中计算了每个组的客户数有条件的统计
一些报表需要一些特定条件的总计,个数,或者其他的规则的统计基准,例如一些数据是雇员在特定日期内的各个国家的销售纪录,你希望在group footer处打印出来的是各个国家的销售纪录,而不用按国家进行分组。
Sales For: 6/5/1996
Last Name First Name Country Sales
Leverling Janet USA 1000
Laverling Janet UK 560
Davolio Nancy USA 2000
Davolio Nancy UK 1067
Sales For: 6/5/1996
Country Last Name First Name Sales
USA Leverling Janet 1000
UK Leverling Janet 560
USA Davolio Nancy 2000
UK Davolio Nancy 1067
Total USA 3000
Total UK 1672
这个示例示范了如果设置一个有条件要求的报表,条件是用给定的变量去完成合计操作。
1. 建立一个新的VB程序
2. 添加两个按钮在Form1中。
3. 给按钮的Name属性赋值为cmdPrint和cmdPreview
4. 添加ActiveReports要工程中
5. 为Form1中的按钮添加如下代码
Private Sub cmdPrint_Click()
ActiveReport1.printreport false
End Sub
Private Sub cmdPreview_Click()
ActiveReport1.show
End Sub6. 放置一个ADO控件至ActiveReport1中。
7. 连接到Nwind.mdb
8. 设置数据控件的source属性如下SQL语句:SELECT DISTINCTROW Employees.Country, Employees.LastName, Employees.FirstName, Orders.ShippedDate, Orders.OrderID, [Order Subtotals].Subtotal AS SaleAmount FROM Employees INNER JOIN (Orders INNER JOIN [Order Subtotals] ON Orders.OrderID = [Order Subtotals].OrderID) ON Employees.EmployeeID = Orders.EmployeeID ORDER by Orders.ShippedDate Desc
9. 右键单击,添加一个GroupHeader/Footer
10. 单击新添加的GroupHeader1
11. 修改它的属性如下
Name ghShippedDate
DataField ShippedDate
Height 840
12. 单击新建的GroupFooter1
Name gfShippedDate
Height 810
14. 添加两个文本框至gfShippedDate并且修改它们的属性如下所示
Name txtTotalUSA txtTotalUK
Height 270 270
Left 7740 7740
Top 90 450
Width 1530 1530
Alignment ddTXRight ddTXRight
OutputFormat $###0.00 $###0.0015. 添加2个标签至gfShippedDate并且修改它们的属性如下所示
Name lblTotalUSA lblTotalUK
Caption US Total Sales UK Total Sales
Height 270 270
Left 7740 7740
Top 90 450
Width 1530 1530
Alignment ddTXRight ddTXRight
Font.Bold True True
16. 从Fields窗口中选择下列字段到detail section中
Country LastName FirstName SaleAmount
17. 设置字段的属性如下所示
Name txtCountry txtLastName txtFirstName txtSaleAmount
DataField Country LastName FirstName SaleAmount
Height 270 270 270 270
Left 0 1530 4140 7830
Top 0 0 0 0
Width 1440 2520 2790 1440
Alignment ddTXLeft ddTXLeft ddTXLeft DdTXRight
OutputFormat $###0.00
18. 从Fields窗口中选择下列字段到ghShippedDate section中
ShippedDate
19. 设置它的属性如下所示
Name txtShippedDate
DataField ShippedDate
Height 360
Left 1620
Top 0
Width 2790
Font.Bold True
Font.Size 16
20. 添加5个标签至ghShippedDate,并且设置它们的属性如下所示
Name lblSales lblCountry lblLastName lblFirstName lblSaleAmount
Caption Sales Country Last Name First Name Sales Amount
Height 360 270 270 270 270
Left 0 0 1530 4140 7830
Top 0 540 540 540 540
Width 1530 1440 2520 2790 1440
Font.Bold True True True True True
Font.Size 16
Alignment ddTXRight
21. 设置Detail sections的CanShrink属性为True.
添加下列代码到Detail_Format事件中,一个增加的整型变量,用于计算每个国家销售总数的数目,然后在gfShippedDate_Format过程中设置变量的总数(注:这里只是用整型来统计,既小数不算,译者添)
Dim iTotalUSA As Integer
Dim iTotalUK as IntegerPrivate Detail_Format()
If txtCountry = "USA" Then
iTotalUSA = iTotalUSA + txtSaleAmount.DataValue
ElseIf txtCountry = "UK" Then
iTotalUK = iTotalUK + txtSaleAmount.DataValue
End If
End SubPrivate Sub gfShippedDate_Format()
txtTotalUK.DataValue = iTotalUK
txtTotalUSA.DataValue = iTotalUSA
iTotalUK = 0
iTotalUSA = 0
End Sub使用公式和计算字段
在这个示例中,我们将新建一个从order details表中取的数据的报表,报表将在每个详细资料中根据单价分组,然后统计customer,所有销售统计额,所有数量。这个示例示范了DatatField属性用统计方法的效果。
1. 建立一个新的ActiveReport
2. 在detail section中插入一个ADO控件
3. 连接到Nwind.mdb
4. 设置该控件的source属性如下SQL语句:
SELECT
Customers.CompanyName,
Products.ProductName,
[Order Details].UnitPrice,
[Order Details].Quantity
FROM Products
INNER JOIN ((Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID)
INNER JOIN [Order Details]
ON Orders.OrderID = [Order Details].OrderID)
ON Products.ProductID = [Order Details].ProductID
WHERE (((DatePart("yyyy",[OrderDate]))=1995))
ORDER BY Customers.CompanyName, Products.ProductName
5. 插入一个group header/footer section.
6. 设置GroupHeader属性如下所示
Name ghCustomer
DataField CompanyName
Height 765
7. 添加一个文本框控件至ghCustomer section并且设置它的属性如下所示
Name txtCompanyName
DataField CompanyName
Height 360
Left 0
Top 0
Width 5670
8. 添加4个标签至ghCustomer section并且设置它们的属性如下所示
Name lblProductName lblQuantity lblUnitPrice lblExtended
Caption Product Name Quantity Unit Price Extended
Height 270 270 270 270
Left 0 3420 5040 7020
Top 450 450 450 450
Width 3330 1530 1890
10. 设置detail section的高度为300并且设置它们的属性如下所示
Name txtProductName txtQuantity txtUnitPrice txtExtended
DataField ProductName Quantity UnitPrice Extended
Height 270 270 270 270
Left 0 3420 5040 7020
Top 0 0 0 0
Width 3330 1530 1890 1620
OutputFormat Number Currency Currency
10. 你的报表开起来应该象这样
11. 设置txtExtended DataField属性如下:= Quantity * UnitPrice
12. 运行工程,并且点Preview按钮,你就可以看到这样一份报表,extended 是price和Quantity计算出来的在Footer中设置N在M页
你可以使用PageCount来添加页数到你的报表中,页数是使用统计字段来建立的。
1. 添加两个文本框和两个标签在Page Footer section中
2. 设置它们的属性如下所示
Name txtPageNumber txtPageCount lblPage
SummaryRunning 2-in all
SummaryType 4-ddSMPageCount 4-ddSMPageCount
3. 你看到页脚应该看上去向这样
当你预览你的报表时,您就可以看到一个连续的页码了。
注:使用PageCount 是因为报表中所有的sections都会延迟到报表结束在Group Header中设置N在M页
你可以使用PageCount添加页面的到分组栏中,页数在用统计字段来建立
1. 添加两个文本框和两个标签到Group Header section中
2. 设置如下属性
Name txtPageNumber txtPageCount lblPage lblOf
SummaryGroup GroupHeader1 GroupHeader1
SummaryRunning 1-ddSRGroup
SummaryType 4-ddSMPageCount 4-ddSMPageCount
Caption Page of
3. 当你预览你的报表,你将可以看到连续的n of m页
注:使用PageCount 是因为报表中所有的sections都会延迟到报表结束
[email protected]
翻译完了别忘了贴出来供大家参考哟。
如果只是两个人的EMail交流就不算是CSDN了。
[email protected]
这里有下!
11. 从弹出菜单中选择fields项,在打开的fields窗口中单击上面的刷新按钮
12. 从fields窗口中拖拽以下字段至detail section中:CompanyName ,City,Country,PostalCode这段话,fields是指什么?我的ar里怎么什么都没显示呀?