使用子报表创建一个MasterDetail报表.docx_第1页
使用子报表创建一个MasterDetail报表.docx_第2页
使用子报表创建一个MasterDetail报表.docx_第3页
使用子报表创建一个MasterDetail报表.docx_第4页
使用子报表创建一个MasterDetail报表.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用子报表创建一个Master-Detail报表子报表是包含在另一个报表(主报表)中的某个字段中的常规报表。子报表通常被设计在一个主从应用场景中,用来基于主报表中的一个当前值显示详细的信息。在接下来的示例中,主报表包含了分组而位于内容区域的子报表包含当前分组的产品详细信息。为了基于Categories 和Products数据表生成一个主从报表,您需要创建一个Categories(主视图)报表和一个Products报表(详细视图)。步骤一:创建主报表1.使用C1Report向导创建一个基本的报表定义。a.从Northwind数据库选择(位于“ComponentOne SamplesCommon”目录下的Nwind.mdb)Categories数据表。包含CategoryName和Description字段至报表。2.在C1ReportDesigner应用程序中,单击Close Print Preview按钮以开始编辑报表。3.设置页眉和报表页眉报表节的Visible属性的值为False。4. 在内容区域,选择DescriptionCtl并将其直接移动至CategoryNameCtl下方。5. 通过属性窗体改变外观设置(字体和前景色)。注意,在本示例中,我们向内容区域添加了一个渐变字段。关于渐变字段的更多信息,请参见“添加渐变字段”章节。6.单击预览按钮,Categories报表现在应当看起来如下图所示:步骤二:创建详细报表1.在C1ReportDesigner应用程序中,通过单击新建报表按钮使用C1Report向导创建一个基本的报表定义。a.从Northwind数据库选择Products数据表。包含以下字段至报表:ProductName,QuantityPerUnit,UnitPrice,UnitsInStock,以及UnitsOnOrder。2.在报表设计器中,单击Close Print Preview以开始编辑报表。a.设置页眉和报表页眉报表节的Visible属性的值为False。在内容区域,排布所有的控件,使其对齐到相关的标题标签。使用属性窗体改变外观设置。步骤三:创建子报表字段现在C1ReportDesigner程序拥有了两个独立的报表,Categories报表和Products报表。下一步是创建一个子报表:1.在设计器的报表列表中,选择Categories(主报表)。2.在设计模式下,从Design标签页的Fields分组,单击AddSubreport按钮,并从下拉菜单选择Products报表。3.在报表的Detail区域,单击并拖拽鼠标指针创建一个子报表区域:步骤四:将子报表链接到主报表主从关系由子报表字段的Text属性进行控制。该属性应当包含一个表达式,该表达式可以计算出一个筛选子报表数据源的条件。报表设计器可以为您自动生成这个表达式。尝试完成以下步骤:1.右键单击子报表字段,并从菜单上选择Link Subreport。2.弹出的对话框允许您选择通过哪些字段进行链接。3.完成选择,并单击OK,报表设计器将生成链接表达式并将其设置给子报表字段的Text属性。在本示例中,生成的表达式为:CategoryID = & CategoryID & 您同样也可以通过以下步骤链接子报表到主报表:1.在属性窗体,单击子报表的Text属性,并选择位于下拉列表上的ScriptEditor。2. 在VBScript编辑器中输入以下表达式:CategoryID = & CategoryID & 3.单击OK关闭VBScript编辑器以生成表达式。预览并打印报表从设计器窗体左侧的报表列表选择报表,并单击预览按钮,以预览一个报表,该按钮出现在每一个Ribbon标签页上:同样,也可以从菜单选择View | Preview。报表在右侧面板显示,如下面的屏幕截图所示:主窗体具有一个预览导航工具栏,上面有按钮可以按页查看整个文档并选择缩放模式。在这里,您可以通过单击打印按钮打印报表:导出并发布报表除了打印报表,您也许希望导出报表成为一个文件,并以电子文档方式共享给客户或者同事。设计器支持以下导出格式:格式描述分页式HTML (*.htm) 为报表中的每一个页面创建一个HTML文件。这些HTML页面包含链接,用户可以使用此链接在报表的各个页面中导航。钻取式 HTML (*.htm) 创建一个单一的HTML文件,各个报表节可以通过单击收起或展开。普通HTML (*.htm) 创建一个单一的HTML文件,不具有收起或者展开功能。使用系统字体的PDF (*.pdf) 创建一个可以在装备了Adobe Acrobat阅读器或者浏览器插件的任意电脑上查看的PDF文件。带有内嵌字体的PDF (*.pdf) 创建一个具有内嵌字体信息的PDF文件,具有更好的可移植性。该选项将显著增大PDF文件的尺寸。RTF (*.rtf) 创建一个RTF格式的文本,可以被大多数流行的字处理软件打开(例如,Microsoft Word,WordPad)。具有固定位置信息的RTF (*.rtf) 创建一个具有固定的位置信息的RTF格式的文本,可以被大多数流行的字处理软件打开(例如,Microsoft Word,WordPad)。Microsoft Excel 97 (*.xls) 创建一个XLS格式的文件,该文件可以被Microsoft Excel打开。Microsoft Excel 2007/2010 Open XML (*.xlsx) 创建一个XLS格式的文件,该文件可以被Microsoft Excel2007或者更新的版本打开。TIFF (*.tif) 创建一个多页面的TIFF(标记图像文件格式)文件文本文件(*.txt) 创建一个纯文本文件。单页面文本文件(*.txt) 创建一个单页面的纯文本文件。压缩的元文件 (*.txt) 创建一个压缩的元文件的文本文件。为创建一个导出文件,从菜单选择File | Export,并通过文件保存对话框选择希望创建的文件类型,并设定其文件名和保存位置。注意:当文档导出至RTF或者DOCX格式,同时选择了“保留分页信息”选项时,文档将被放在不同的文本框中,结果文档中的重新文档流排布功能可能会受到限制。管理报表定义文件一个报表定义文件可能包含若干报表。有时,您可能需要从一个文件复制或者移动报表到另一个。打开两个不同的C1ReportDesigner应用程序的实例,并从一个实例拖拽报表到另一个可以实现从一个文件移动报表到另一个。如果在这一过程中您按下了CTRL键,该报表将被复制。否则,将移动该报表。您同样可以在一个文件中复制一个报表。这将创建报表的一个新的实例,这在开始设计一个新的和现有报表相似的报表时是一种非常有效的技巧。注意,报表文件保存为XML格式,因此您可以通过任何文本编辑器编辑和管理它们。导入Microsoft Access报表C1ReportDesigner应用程序众多强大的功能之一是能够导入MicrosoftAccess创建的报表。该功能需要在确保电脑上安装了Access。一旦报表被导入设计器中,将不再依赖Access程序。单击Application按钮并从菜单选择Import。将会显示一个对话框,提示您选择希望导入的文件名。选择一个MicrosoftAccess文件(MDB或者ADP),之后设计器将扫描该文件,并显示一个对话框。您可以选择希望导入的报表:该对话框允许您指定是否设计器在开始导入过程之前需要清除全部当前定义的报表。导入过程将处理源报表的大部分元素,除了一些列外: 事件处理器代码Access报表可以使用VBA,宏以及表单以动态格式化报表。C1Report可以做同样的事情,但是只能够使用VBScript。正因如此,全部的报表代码需要手动翻译并迁移。 面向表单的字段类型Access报表可能包含一些特定的字段,这些字段不会被设计器的导入过程处理。以下字段类型不被支持:Chart,CommandButton,ToggleButton,OptionButton,OptionGroup,ComboBox,ListBox,TabCtl,以及CustomControl。 使用了VBScript保留字的报表由于Access不支持VBScript,因此可能在之前设计报表的时候用到了VBScript保留关键字做为报表对象的标识符或数据集字段的名称。这将使得当VBScript引擎尝试解析并计算表达式的时候遇到问题,并会导致报表不能正确地呈现。不应当作为标识符使用的保留关键字包括Date,Day,Hour,Length,Minute,Month,Second,Time,TimeValue,Value,Weekday,以及Year。关于保留关键字的全部列表,请参见“VBScript参考” 按照季度(或者周,月份等等)对日期排序的报表C1Report使用ADO.NET数据集的Sort属性对分组进行排序。该属性仅按照字段的值对数据集进行排序,不支持表达式。(注意您能够按照任意表达式进行分组,但是不能排序。)一个按照季度对分组进行排序的Access报表将在导入之后按照日期对分组进行排序。为了修正这个问题,您有两种方式:创建一个新的字段,该字段包含希望进行排序的表达式的值;或者改变SQL表达式,创建一个新的数据集并对新的数据集执行排序。这些限制将影响为数不多的一些报表,不过在导入这些报表之后您应当预览全部的报表,确保它们可以正常工作。导入Nwind.mdb文件为了演示设计器如何在一个现实的示例中工作,请尝试导入Nwind.mdb文件。它包含以下十三个报表。(随C1Report发布的Nwind.xml文件已经包含了以下全部的改动。)1. Alphabetical List of Products 不需要做任何改动。2. Catalog 不需要做任何改动。3. Customer Labels 不需要做任何改动。4. Employee Sales by Country 该报表包含代码,需要手动转换。以下代码应当设置给Group1 Header 对象的OnPrint属性: Visual Basic If SalespersonTotal 5000 ThenExceededGoalLabel.Visible = True SalespersonLine.Visible = True Else ExceededGoalLabel.Visible = False SalespersonLine.Visible = False End If C# if (SalespersonTotal 5000) ExceededGoalLabel.Visible = true; SalespersonLine.Visible = true; else ExceededGoalLabel.Visible = false; SalespersonLine.Visible = false; 5. Invoice 不需要做任何改动。6. Products by Category 不需要做任何改动。7. Sales by Category 该报表包含一个图表控件,该控件无法被导入。为了向导入的报表添加一个图表,您需要使用一个非绑定的图片字段,之后使用VB事件处理器创建这个图表并做为图片保存到该字段。8. Sales by Category Subreport不需要做任何改动。9. Sales by Year 该报表包含一段引用Form对象的代码,该代码需要被手工迁移。为替代Form对象,编辑RecordSource属性以添加一个ShowDetails参数: Visual Basic PARAMETERS (Beginning Date) DateTime 1/1/1994, (Ending Date) DateTime 1/1/2001,(Show Details) Boolean False; . C# PARAMETERS Beginning Date DateTime 1/1/1994, Ending Date DateTime 1/1/2001, Show Details Boolean False; .在报表的OnOpen事件中使用这个新的参数: Visual Basic Dim script As String = _ bDetails = Show Details &vbCrLf& _ Detail.Visible = bDetails &vbCrLf& _ Group 0 Footer.Visible = bDetails &vbCrLf& _ DetailsLabel.Visible = bDetails &vbCrLf& _ LineNumberLabel2.Visible = bDetails &vbCrLf& _ Line15.Visible = bDetails &vbCrLf& _ SalesLabel2.Visible = bDetails &vbCrLf& _ OrdersShippedLabel2.Visible = bDetails &vbCrLf& _ ShippedDateLabel2.Visible = bDetails &vbCrLf& _ Line10.Visible = bDetails c1r.Sections.Detail.OnPrint = script C# string script = bDetails = Show Details + Detail.Visible = bDetailsrn + Group 0 Footer.Visible = bDetailsrn + DetailsLabel.Visible = bDetailsrn + LineNumberLabel2.Visible = bDetailsrn + Line15.Visible = bDetailsrn + SalesLabel2.Visible = bDetailsrn + OrdersShippedLabel2.Visible = bDetailsrn + ShippedDateLabel2.Visible = bDetailsrn + Line10.Visible = bDetails; c1r.Sections.Detail.OnPrint = script; 最后,需要转换其他两行代码: Visual Basic Sections (Detail).OnPrint = _ PageHeader.Visible = True Sections(Group 0 Footer).OnPrint = _ PageHeader.Visible = False C# Sections (Detail).OnPrint = PageHeader.Visible = true; Sections(Group 0 Footer).OnPrint = PageHeader.Visible = false;10. Sales by Year Subreport不需要做任何改动。11. Sales Totals by Amount 此报表包含需要手工迁移的代码。以下代码需要指定给PageHeader的OnPrint属性: Visual Basic PageTotal = 0 C# PageTotal = 0; 以下代码应当指定给Detail的OnPrint属性: Visual Basic PageTotal = PageTotal + SaleAmountHiddenPageBreak.Visible = (Counter = 10) C# PageTotal = PageTotal + SaleAmount; HiddenPageBreak.Visible = (Counter = 10); 12. Summary of Sales by Quarter 该报表具有一个按照季度排序的分组(参见之

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论