词条 | Microsoft数据报表设计器 |
释义 | 简介Microsoft数据报表设计器(Microsoft Data Report designer)是一个多功能的报表生成器,以创建联合分层结构报表的能力为特色。同数据源(如数据环境设计器(Data Environment designer))一起使用,可以从几个不同的相关表创建报表。除创建可打印报表之外,也可以将报表导出到 HTML 或文本文件中。 可能的用法为在 Internet 立即发行而自动地以 HTML 格式创建导出的报表。 创建报表,显示一天内所发生交易的合计。 数据报表设计器特性数据报表设计器有如下几个特性: 1. 对字段的拖放功能—把字段从 Microsoft 数据环境设计器拖到数据报表设计器。当进行这一操作时,Visual Basic 自动地在数据报表上创建一个文本框控件,并设置被放下字段的DataMember和DataField属性。也可以把一个Command对象从数据环境设计器拖到数据报表设计器。在这种情况下,对于每一个Command对象包含的字段,将在数据报表上创建一个文本框控件;每一文本框的DataMember和DataField属性将被设置为合适的值。 2. Toolbox控件—数据报表设计器以它自己的一套控件为特色。当数据报表设计器被添加到工程时,控件被自动创建在一个名为DataReport的新“工具箱”选项卡上。多数的控件在功能上与 Visual Basic 内部控件相同,并且包括Label、Shape、Image、TextBox和Line控件。第六个控件,即Function 控件,自动地生成如下四种信息中的一种:Sum、Average、Minimum或Maximum。有关控件的更详细的信息,请参阅“添加一个 Function 控件到 Data Report”。 3. 打印预览—通过使用 Show 方法预览报表。然后生成数据报表并显示在它自己的窗口内。 注意 要在打印预览方式中显示报表,必须在计算机上安装一台打印机。 4. 打印报表—通过调用 PrintReport 方法,以编程方式打印一个报表。当数据报表处于预览方式,用户也可以通过单击工具栏上的打印机图标打印报表。 注意 要打印报表,必须在计算机上安装一台打印机。 5. 文件导出—使用 ExportReport 方法导出数据报表信息。导出格式包括 HTML 和文本。 6. 导出模板—可以创建一个文件模板集合,以同 ExportReport 方法一起使用。这对于以多种格式(每种都报表类型剪裁)导出报表是很有用的。 7. 异步操作—DataReport 对象的 PrintReport 和 ExportReport 方法是异步操作。使用 ProcessingTimeort 事件可以监视这些操作的状态,并取消任何花费时间过长的操作。 主题数据报表部分数据报表设计器由如下对象组成: 1. DataReport 对象—与 Visual Basic 窗体类似,DataReport 对象同时具有一个可视的设计器和一个代码模块。可以使用设计器创建报表的布局。也可以向设计器的代码模块添加代码,以采用编程方式调整设计器中包含的控件或部分的格式。 2. Section 对象—数据报表设计器的每一个部分由 Sections 集合中的一个 Section 对象表示。设计时,每一部分由一个可以单击以选择页的标头和可以放置和定位控件的窗格表示。可以使用对象及其属性在报表生成之前对其进行动态重新配置。 3. Data Report 控件—仅包含可在数据报表设计器上工作的特殊控件。(注意:不能在数据报表设计器上使用 Visual Basic 的内部控件或任何 ActiveX 控件)。这些控件可以在Visual Basic Toolbox中找到,但是它们被放置在一个独立的名为“数据报表”的选项卡上。 数据报表设计器的部分 缺省的数据报表设计器包含如下这些部分: 报表标头—包含显示在一个报表开始处的文本,例如报表标题、作者或数据库名。如果想把报表标头作为报表的第一页,设置它的 ForcePageBreak 属性为 rptPageBreakAfter。 页标头—包含在每一页顶部出现的信息,例如报表的标题。 分组标头/注脚—包含数据报表的一个“重复”部分。每一个分组标头与一个分组注脚相匹配。标头和注脚对与数据环境设计器中的一个单独的 Command 对象相关联。 细节—包含报表的最内部的“重复”部分(记录)。详细部分与数据环境层次结构中最低层的 Command 对象相关联。 页注脚—包含在每一页底部出现的信息,例如页数。 报表注脚—包含报表结束处出现的文本,例如摘要信息或一个地址或联系人姓名。报表注脚出现在最后一个页标头和页注脚之间。 数据报表控件 当一个新的数据报表设计器被添加到一个工程时,下列控件将自动地被放置在名为DataReport的“工具箱”选项卡中: TextBox 控件(RptTextBox)—允许规定文本格式,或指定一个 DataFormat。 Label 控件(RptLabel)—允许在报表上放置标签、标识字段或部分。 Image 控件(RptImage)—使用户能在报表上放置图形。注意,该控件不能被绑定到数据字段。 Line 控件(RptLine)—使用户能在报表上绘制标尺,以进一步区分部分。 Shape 控件(RptShape)—使用户能在报表上放置矩形、三角形或圆形(椭圆型)。 Function 控件(RptFunction)—一个特殊的文本框,报表生成时计算数值。 创建一个简单数据报表创建了一个简单数据报表,该报表使用数据环境设计器作为数据源。数据环境设计器使用和 Visual Basic一起提供的 NorthWind 数据库创建一个简单的层次结构游标。该游标包含两个表,Customers 和 Orders,并使用“CustomerID”字段链接两个表。完成的报表类似于下面的插图。 简单数据报表:客户的订单日期 在开始逐步处理之前,确保计算机上存在 Northwind 数据库(Nwind.mdb)。如果不存在,从 Visual Basic CD 复制一份文件到计算机的硬盘上。 要在数据环境设计器中创建一个简单的层次结构游标,请按照下列步骤执行: 1、创建一个新的“标准 EXE”工程。 2、在“工程”菜单上,单击“添加 Data Enviroment”向工程中添加一个设计器。如果设计器没有在“工程”菜单上列出,则单击“部件”。单击“设计器”选项卡。并单击“数据环境”把设计器添加到菜单上。 注意 最初为项目加载的四种ActiveX设计器在“工程”菜单上列出。如果加载了超过四个设计器,后面的设计器可以从“工程”菜单的“更多 ActiveX 设计器”子菜单中获得。 3、在“数据链接属性”对话框上单击“Microsoft Jet 4.0 OLE DB Provider”,这是为访问 Jet 数据库选择正确的 OLE DB 供应商。 4、单击“下一步”按钮进入“连接”选项卡。 5、单击第一个文本框旁边的省略按钮(…)。 6、用“选择 Access 数据库”对话框浏览到 nwind.mdb 文件,它被安装在 Program Files\\Microsoft Visual Studio\\Vb98 目录下。 7、单击“确定”关闭对话框。 8、右键单击“Connection1”图标,单击“重命名”,把图标名改为“Northwind”。 9、右键单击“Northwind”图标,然后单击“添加命令”显示“Command1”对话框。在对话框中,如下所示设置属性: 属性 设置值 Command Name Customers Connection Northwind DataBase Object Table Object Name Customers 10、单击“确定”结束对话框。 11、右键单击“Customers”命令,并单击“添加子命令”显示“Command2”对话框。在对话框中,如下所示设置属性: 属性 设置值 Command Name Orders Connection Northwind DataBase Object Table Object Name Orders 12、单击“关联”选项卡。应该选中“与父命令对象相关联”复选框。“父”框应该包含“Customers”;“父字段”和“子字段/参数”框都应该包含“CustomerID”。 在设计关系数据库时,对于链接字段,习惯上相关的表要使用相同的名字。在这种情况下,链接字段都被命名为 CustomerID。数据环境设计器自动地在对话框中匹配这样的对。 13、单击“添加”。单击“确定”关闭对话框。 单击“添加”按钮向 Command 对象添加关系。在关闭了对话框之后,数据环境设计器通过把两个命令显示为一个层次结构来反映关系。该层次结构将被用于创建数据报表。 14、根据下面的设置值设置工程和设计器的属性,然后保存工程: 对象 属性 设置值 Project Name PrjNwind DataEnvironment Name DeNwind Form Name FrmShowReport 创建数据报表 一旦创建了数据环境设计器,就可以创建一个数据报表。因为并不是数据环境中所有的字段在一个数据报表中都有用,这一系列的主题创建一个受限制的报表,只显示几个字段。 要创建一个新的数据报表,请按照下列步骤执行: 1、在“工程”菜单上,单击“添加 Data Report”,Visual Basic 将把它添加到您的工程中。如果设计器不在“工程”菜单上,单击“部件”。单击“设计器”选项卡,并单击“Data Report”把设计器添加到菜单上。 注意 为工程加载的前四种 ActiveX 设计器在“工程”菜单上列出。如果加载了多于四个设计器,后面的设计器可以从“工程”菜单的“更多 ActiveX 设计器”子菜单中获得。 2、根据下面的表设置 DataReport 对象的属性: 属性设置值 NamerptNwind CaptionNorthwind Data Report 3、在“属性”窗口上,单击“数据源”,然后单击“deNwind”。然后单击“DataMember”并单击“Customers”。 重点 要把 DataSource 属性设置为 deNwind,数据环境设计器必须为打开的。如果数据环境设计器是关闭的,按下 CTRL+R 键显示“工程”窗口,然后双击数据环境图标。 4、右键单击数据报表设计器,并单击“检索结构”。 您已经向设计器添加了一个新的分组。每一个分组都同数据环境中的 Command 对象有“一对一”对应关系;在这种情况下,新的分组与客户的 Command 对象相对应。同时也要注意分组标头有一个与之匹配的分组注脚部分。 注意 如果某个 Command 对象有多于一个的子对象 — 相互“平行”的子 Command 对象,则 Data Environment 使您可以创建该 Command 对象的层次结构。Data Report 设计器,却没有那么灵活,在同一时间不能显示多于一个的子对象。此时,当执行一个 Retrieve Structure Command命令时,Data Report 将只显示第一个子 command,其他的都不显示。所以,您应该避免创建带有“平行”子 command的 Command 层次结构。 5、从数据环境设计器,把“CompanyName”字段(在“Customers”命令下)拖到分组标头(Customers_Header)部分。 分组标头部分可以包含 Customers 命令的任何字段,然而,出于演示目的,此时只显示 Customer 名。 6、删除名为“Label1”的 Label 控件(rptLabel)。 如果不希望 Label 控件包括在 TextBox 控件中,可以在数据环境设计器的“选项...”对话框的“字段映射”选项卡上撤消对“Drag and Drop Fields Caption”选项的选择。 7、从数据环境设计器中,把“OrderDate”字段(在Orders命令下)拖到细节(Orders_Detail)部分。删除Label控件。 细节部分表示最内层的“重复”部分,因而与数据环境层次结构(OrdersCommand对象)中最底层的 Command 对象相对应。 8、重新调整数据环境设计器部分的大小,使之与下面的插图类似: 9、重新调整细节部分的高度,使它尽可能的矮是很重要的,因为高度将会与为每一个 CompanyName 返回的 OrderDate 相乘。OrderDate 文本框下面或上面的任何多余位置将在最后的报表中导致不必要的空间。 10、保存工程。 使用 Show 方法预览数据报表 既然数据环境和 Data Report 对象已经创建,就几乎准备好运行工程了。还剩下一步:写代码以显示数据报表。 要在运行时显示数据报表,请按照下列步骤执行: 1、在“工程资源管理器”窗口上,双击“frmShowReport”图标,显示窗体设计器。 2、在“工具箱”上,单击“通用”选项卡。 当把一个数据报表设计器添加到工程时,数据报表设计器的控件被添加到名为“Data Report”的选项卡上。要使用标准的 Visual Basic 控件,必须切换到“通用”选项卡。 3、单击“CommandButton”图标并在窗体上绘制一个“CommandButton”。 4、根据下面的表设置 Command1 控件的属性: 属性 设置值 Name CmdShow Caption Show Report 5、在按钮的 Click 事件中,粘贴下面的代码。 Private Sub cmdShow_Click() rptNwind.Show End Sub 6、保存并运行工程。 7、单击“显示报表”,在打印预览方式中显示报表。 可选的—将数据报表作为启动对象设置 在没有代码的情况下,也可以显示报表。 1、在“工程”菜单上,单击“prjNwind”属性。 2、在“启动对象”框中,选择“rptNwind”。 3、保存并运行工程。 注意 如果使用这种方法,可以从工程中把Form对象删除。 导出一个数据报表在编译了一个报表之后,您或许希望重新使用它,要么作为一个大文档的一部分,要么在 intranet 或 Internet 上发行。数据报表设计器的 ExportReport 方法使您能够完成这些任务。使用 ExportReport 方法,可以将任何报表作为文本文件或 HTML 文件导出。此外,也可以使用任意的 ExportFormat 对象剪裁已导出的文件的内容或外观。 重点 ExportReport 方法不支持图像或图形形状导出。 ExportFormat 对象 ExportReport 方法被设计为与 ExportFormat 集合一同使用。集合中的每个 ExportFormat 对象表示一个单独的报表格式。例如,一个 intranet 发行格式的报表可能包含工作组或雇员的名字作为报表标头的一部分;为 Internet 发行的报表,则那些名字将被清除或替换。因此要创建至少两个 ExportFormat 对象,每一个要适应于不同的发行机制。然而,也可能不创建任何 ExportFormat对象就导出一个报表,因为已经为您提供了四个。 四个缺省 ExportFormat 对象 缺省情况下,ExportFormat 集合包含四个成员。下表列出了四个成员以及与其相关联的文件过滤器: 对象 文件过滤器 描述 ExportFormats(1) *.htm, *.html HTML ExportFormats(2) *.htm, *.html Unicode HTML ExportFormats(3) *.txt Text ExportFormats(4) *.txt Unicode Text 如果需要使用任何缺省类型,也可以使用Key属性指定缺省的类型。Key属性值和常数如下所示: 对象 关键字 常数 ExportFormats(1) key_def_HTML rptKeyHTML ExportFormats(2) key_def_UnicodeHTML_UTF8 rptKeyUnicodeHTML_UTF8 ExportFormats(3) key_def_Text rptKeyText ExportFormats(4) key_def_UnicodeText rptKeyUnicodeText 假定缺省的成员符合您需要,通过使用四个成员之一,可以不创建另一个ExportFormat对象就导出一个报表。例如,要导出一个按日的HTML报表,可以使用下面的代码: DataReport1.ExportReport rptKeyHTML 显示一个对话框是可选的 编程人员可以决定在导出一个报表时是否显示一个对话框。例如,如果报表在每天早晨自动创建,并写入同一个文件以便在 intranet 上发行,就没有必要显示对话框。只要提供一个有效的文件路径和关键字,并将 Overwrite 参数设置为 True,则不显示对话框。 ' 作为HTML导出一个报表,覆盖任何已经存在的文件。 导出 ' 所有页面到Daily_Report.htm文件。 DataReport1.ExportReport rptKeyHTML, "C:\\Temp\\Daily_Report", True, , _ rptRangeAllPages 注意 在上面的代码中,第二个参数看起来象个目录,但实际上是一个文件名。“Daily_Report.htm”是被写的文件名。ExportFormat 对象提供文件扩展名(.htm),因此没有必要把它写在文件名参数中。ExportFormat 提供对话信息 ExportFormat 对象也包含用户调用 ExportReport 方法时显示的信息。特别的,FileFormatString 属性设置在“导出”对话框的“Save As Type”框中显示的文本。例如,设想一个公司有一个标准的 ExportFormat 对象要用于所有报表。下面的代码将确保 ExportFormat 可以在“导出”对话框的格式类型列表中得到: Dim strTemplate As String ' 首先为ExportFormat对象创建一个模板。 strTemplate = "MyCompany Daily Report" & vbCrLf & rptTagBody ' 添加一个ExportFormat对象。FileFormatString决定 ' 将在“导出”对话框中显示什么内容。DataReport1.ExportFormats.Add _ Key:="StandardReport", _ FormatType:=rptFmtText, _ FileFormatString:="Standard Report (*.txt)", _ FileFilter:="*.txt", _ Template:=strTemplate ' 调用ExportReport方法指定要使用的 ' 名为StandardReport的ExportFormat。 DataReport1.ExportReport "StandardReport", , False, True, _ rptRangeFromTo, 1, 10 被调用时,“导出”对话框类似这样: 模板代码ExportFormat 对象的核心是它的模板。 一个模板只是一个字符串, 其中包括您想要显示的文本以及表示数据报表多个部分的常数。 常数、值和描述如下表所示: 常数 值 描述 rptTagTitle <!--MSDBRPT_Template_Title--> 表示报表的标题,可在Title属性中找到。 rptTagBody <!--MSDBRPT_Template_Body--> 表示报表体。 要创建一个只包括作者名,然后是报表体的简单数据报表,其模板类似这样: Dim strT As String strT = "Author: " & InputBox("Your name") & vbCrLf & rptTagBody drpNwind.ExportFormats.Add "AuExp", rptFmtText, _ "Author Only Text File", "*.txt", strT 打印一个数据报表打印一个数据报表可以使用下面两种方法之一。用户可以单击“打印预览”中数据报表上的“打印”按钮(使用 Show 方法),也可以通过使用 PrintReport 方法编程打印。如果打印过程中发生错误,将在 Error 事件中捕获。 选择显示一个“打印”对话框 当编程打印一个报表时,有两种选择:通过显示“打印”对话框打印,或不显示对话框打印。 要显示“打印”对话框,请按照下列步骤执行: 将一个 CommandButton 添加到窗体。 在按钮的 Click 事件中,放置下面的代码: DataReport1.PrintReport True“打印”对话框允许用户选择一个打印机、打印到文件、选择要打印的页面范围并指定要打印的份数。 注意 要显示打印机选择,打印机必须安装在计算机上。 不显示对话框打印 在有些情况下,您可能希望不需用户干预打印报表。PrintReport 方法也提供这样的选择:选择要打印的页面范围,可以是全部,也可以是一个指定的范围。 要不显示对话框地打印,请按照下列步骤执行: 将一个 CommandButton 添加到窗体 在按钮的 Click 事件中,放置下面的代码: DataReport1.PrintReport False或者,要指定打印的页面范围,请使用下面的代码: DataReport1.PrintReport False, rptRangeFromTo, 1, 2 数据报表事件象标准的 Visual Basic 窗体一样,数据报表设计器的存在是由某些关键事件标记的。那些事件以及它们发生的顺序,如下表所示: 事件 描述 Initialize 查询完成之后发生,并且控件位于窗体上。 Resize 第一次显示设计器或一个对象的窗口状态更改时发生。 Activate 当设计器变为活动窗口时发生。 ProcessingTimeout 大约每秒钟发生一次,直到所有处理都已经结束。使用该事件可以决定处理是否占用太长时间,并取消处理。 注意 在查询完成之前该事件将不发生。请参阅下面的内容。 [Deactivate] 当设计器不再是活动窗口时发生。使用该事件决定用户是否单击了另一个窗体或设计器。 QueryClose 在设计器终止之前发生。设置 Cancel 参数为 True 以取消终止。CloseMode 参数返回引起终止的动作类型。 Terminate 当所有对设计器的引用都被设置为0时发生。 超时和异步调用事件 除设计器的存活期事件之外,DataReport 对象也以允许捕获错误和监视同步或异步函数调用的事件为特色。ExportReport和PrintReport:查询、同步和异步处理 当调用 ExportReport 或 PrintReport 方法时,处理被分为三个阶段——查询、同步处理和异步打印或导出: 查询——当第一次创建数据报表时,发送给数据提供方一个查询。 处理——查询检索到的数据由 Visual Basic 处理以创建报表。数据被高速缓存在计算机上的一个临时文件中。这一处理是同步的。 异步打印或导出——在创建报表后,报表就被导出或打印。这一处理是异步的。 当Show方法被调用时,数据报表执行查询,然后在显示报表之前在同步处理过程中处理数据。 因为这些方法结合了同步和异步处理,有各自的事件监视每种处理。 ProcessTimeOut 事件——对于同步函数 处理一个大的数据报表也许要花费一些时间。如果想要允许您的用户取消过程较长的操作(如 Show、ExportReport 或 PrintReport),可以使用 ProcessingTimeout 事件监视已经过去了多少秒,并按照用户的命令把 cancel 参数设置为True。下面的代码显示了一个示例: Private Sub DataReport_ProcessingTimeout(ByVal Seconds As Long, _Cancel As Boolean, ByVal JobType As MSDataReportLib.AsyncTypeConstants, _ByVal Cookie As Long) Select Case Seconds Case 30 If MsgBox("This has taken " & Seconds & "seconds. Cancel?", _ vbRetryCancel) = vbCancel Then Cancel = True End If Case 45 If MsgBox("This has taken " & Seconds & "seconds. Cancel?", _ vbRetryCancel) = vbCancel Then Cancel = True End If Case 60 '60秒钟后自动取消。 Cancel = True End SelectEnd Sub注意 并不保证在上面指定的间隔会发生 ProcessingTimeout 事件。例如,在后台运行的其他的 Visual Basic 代码可能会阻止这一事件的发生。在那种情况下,将 Case 语句设置为一个范围内的值;当该事件发生时,将一个模块级标志设置为 True,并在随后发生的事件中检查它。 Error 事件——对于异步函数 要捕获在没有 Visual Basic 代码执行(也就是说,一个异步函数)时发生的错误,请使用 Error 事件。例如,如果 PrintReport 或 ExportReport 方法在异步阶段失败,Error 事件将发生。下面的示例捕获异步错误: Private Sub DataReport_Error(ByVal JobType As _MSDataReportLib.AsyncTypeConstants, ByVal Cookie As Long, _ByVal ErrObj As MSDataReportLib.RptError, ShowError As Boolean) Select Case JobType ' The JobType identifies the process. Case rptAsyncPrint ' 此处捕获 PrintReport 错误。 Case rptAsyncReport ' 此处捕获 ExportReport 错误。 End SelectEnd Sub也可以使用 Error 事件捕获特定的情况,例如计算机上缺少打印机,如下面的代码中所示: Private Sub DataReport_Error(ByVal JobType As _MSDataReportLib.AsyncTypeConstants, ByVal Cookie As Long, _ByVal ErrObj As MSDataReportLib.RptError, ShowError As Boolean) Case rptErrPrinterInfo ' 8555 MsgBox "A printing error has occurred. " & _ "You may not have a Printer installed." ShowError = False Exit Sub Case Else ' 此处处理其他情况。 ShowError = True End SelectEnd SubAsyncProgress 事件 不是为捕获错误而设计的,但允许监视异步函数的状态。到这一事件发生时,所有的数据都已经被处理过;这样,事件的两个参数是 PagesCompleted 和 TotalPages。该事件还包括标识异步操作的参数:则 JobType 和 Cookie 参数可以被用于监视任何处理的过程。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。