我的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. 保存并运行报表
当报表运行时,参数对话框将被打开,参数的默认值被显示在上面。

解决方案 »

  1.   

    分组纪录
    我们刚才使用报表做了第一个联系,下面我们来示范在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按钮,然后你就可以看到报表通过第一个公司名分组的运行的情况。
      

  2.   

    在Group Footer中添加一个统计字段
    统计字段能够添加到任何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
      

  3.   

    13. 修改它的属性如下
    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都会延迟到报表结束
      

  4.   

    请将原E文发至:
    [email protected]
      

  5.   

    呵呵,再好不过,不过呢我还是想靠自己先翻译一下,毕竟对E文有一点帮助的。不过我一定会麻烦你的。哈哈。我记住你了qingming81(晴明) :)
      

  6.   

    qingming81(晴明):好人。
    翻译完了别忘了贴出来供大家参考哟。
    如果只是两个人的EMail交流就不算是CSDN了。
      

  7.   

    楼主哪里有activereport的help阿,E文中文都好阿!可不可以发一份给我,我也在学!谢谢
    [email protected]
      

  8.   

    你安装activeReport不就有吗,我这边有英文的,中文的还没有完全翻译好,再说我翻译的中文可能也只有我能看的懂。
      

  9.   

    怎么安装它?在哪里下载?[email protected]
      

  10.   

    ftp://ftp.grapecity.com/China/datadynamics/ar2StdEval1170.exe
    这里有下!
      

  11.   

    请问,搂主的文档里
    11. 从弹出菜单中选择fields项,在打开的fields窗口中单击上面的刷新按钮
    12. 从fields窗口中拖拽以下字段至detail section中:CompanyName ,City,Country,PostalCode这段话,fields是指什么?我的ar里怎么什么都没显示呀?