FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。
FastReport.NET官方版下载(qun:585577353)https://www.evget.com/product/1861/download
这种类型的报告是经常需要的。它允许从数据源中打印一个行的列表。例如,这可以是一个客户名单。
连接一个带子到数据源
要打印数据源的数据,需要 "Data "带。当该条带将被打印,其次数与数据源中的行数相同。
If the "Data" band is not connected to the source, it gets printed once.
当你创建一个新的报告时,它已经包含几个空带,包括 "Data"带。这个带子也可以从 "Configure Bands "窗口中,通过选择 "Report|Configure Bands... "菜单项添加到报告中。
为了把一个带子连接到数据上,双击它。在编辑器窗口中选择数据源并点击 "ОК":
打印文本
当你把带子连接到数据源后,你可以把 "Text "对象放在带子上,它将显示数据列的信息。最快的方法是--从 "Data "窗口中拖出一个数据列,然后把它放到带子上。在 "The Text object"一章中阅读更多关于 "Text "对象的内容。
数据分类
默认情况下,"Data "带按自然顺序打印数据。通常情况下,在打印前需要对数据进行排序。例如,一个客户名单可以通过按字母顺序排序来舒适地呈现。
你可以在 "Data "段编辑器中控制排序。为了调用编辑器,请双击带子上的一个空位:
作为一个排序条件,你可以使用一个数据列或一个表达式。你可以指出几个(不超过三个)排序条件。
例如,如果你想按城市对客户列表进行排序,然后再按客户的名字排序。对于每个条件,你可以选择排序的顺序--升序或降序。
另一种排序数据的方法 - 使用SQL查询作为数据源。该查询将在数据服务器上执行,并返回一个排序的行。
数据筛选
为了过滤打印在 "Data "带中的行,调用其编辑器并切换到 "Filter "标签:
作为一个过滤表达式,你可以表示任何正确的表达式。关于表达式的更多细节可以在 "Expressions"章节中找到。
在上面的例子中,使用了以下过滤器:
[Products.Discontinued] == false
表明所有断开连接标志等于false的数据行将被选中。
你可以使用复杂的过滤条件:
[Products.Discontinued] == false && [Products.UnitPrice] < 10
表明所有断开连接标志等于false的数据行,以及价格小于10的数据行将被选中。
这种过滤方法假定数据源包含所有的行,其中一部分将被过滤。如果数据源包含大量的行,这可能会严重降低报告的速度。故你可以使用SQL查询作为数据源,你可以在其中执行所需的过滤。该查询将在数据服务器上执行,只返回报告中需要的行。
You also may use dialogue forms to perform data filtering. See more details in the "Dialogue forms" chapter.
数据页眉和页脚
一个 "Data "带可以包含一个页眉和一个页脚。页眉将在数据前打印一次,页脚将在所有数据输出后打印。
为了给 "Data "带添加页眉和页脚,选择 "Report|Configure Bands... "菜单项。在窗口中,选择 "Data "带,然后右击鼠标。在上下文菜单中选择 "Header "和/或 "Footer "项目:
这些带子在以下情况下可以发挥作用:
当在一页上打印多个列表时("master-master" "报告)。在这种情况下,每个数据带都可以有自己的页眉和页脚:
当打印一个列表时,如果该列表不适合在准备好的报告中的一页上打印。通过使用数据页眉/页脚的 "Repeat On Every Page "属性,你可以在报告的每一页打印这些带子:
打破数据并保持其一致性
在本节中,我们将研究两种数据打印模式--"Break "和 "Keep together"。
在常规的带状打印模式中,FastReport检查当前页是否有足够的空间来打印一个带状。如果没有,则在下一页上全部打印出带子。如果带子的 "CanBreak "属性被激活,FastReport将尝试将带子的一部分打印在可用的空间上,也就是 "Break "。
打破一个带子的尝试可以成功,也可以不成功。这取决于被放置在带子上的对象的类型和它的设置。以下物体可以被打破:
-
- "Text"
- "Rich Text"
- "Table"
- 这些对象也有 "CanBreak "属性。如果它被启用,那么该对象就可以被打破。不易破碎的对象总是完全显示,在那里,它们有足够的位置。
在下图中,显示了一个带子是如何被打破的。
Break algorithm does not always work correctly. The artifacts can occur in a situation, when there are several objects with different font size on a band.
断带的目的是为了节省印张上的空间。数据保持的目标则相反:在一张纸上完全显示一组带子。在这种情况下,虽然纸张上会有很多未使用的空间,但数据的打印方式让人很舒服。
"keep together "机制允许将一组带子保持在一张纸上(或列,如果报告有列的话)。如果在打印时,保留的数据到了页面的末端,FastReport会将所有已经打印过的数据重新定位到新的页面。
你可以在以下情况下使用 "keep together":
一起打印 "Data"带的所有行;
一起打印一个组的所有元素(页眉、数据、页脚);
将主数据源的行与所有明细行一起打印(在 "master-detai "报告中);
打印报告页眉或数据页眉与至少一个数据行;
打印报告页脚或数据页脚以及至少一个数据行;
一起打印父带和子带。
让我们来看看 "keep together "机制的使用情况。
要把所有的数据行或组元素(页眉、数据、页脚)放在一起,请启用 "KeepTogether "属性。这个属性在 "Data "和 "Group Header "带中使用。
下图显示了在有和没有保持在一起的情况下数据的打印情况:
要把主数据行和详细数据行放在一起,请启用 "KeepDetail "带的 "KeepDetail "属性。这个属性用于 "master-detail "类型的报告中:
为了防止 "hanging "页眉和页脚,请使用 "KeepWithData "属性。下面这些带子都有这个属性:
- report header
- 报告页脚
- data header
- 数据页脚
- 组头
- 组页脚
这个属性允许保持至少有一个数据行的页眉/页脚:
为了使一个带子和它的子带子保持在一起,启用 "KeepChild "属性。
打印
当数据带连接到一个空的数据源时,它将不会被打印。有时需要打印一些文本,如 "No data",而不是只打印一个空页。要做到这一点:
- 给数据带添加一个子带
- 将子带的PrintIfDatabandEmpty属性设置为true(可以在 "Properties "窗口中完成)
- 把 "Text "对象放在子带上,并在其中写上 "No data to display"的文字
该报告将以如下方式打印:
- 如果数据源有一些数据行,数据带将被打印出来,同时还有所有相关的带(数据头/数据脚);
- 如果数据源是空的,只有带有 "No data to display "文本的子带将被打印。
印刷层次
一个 "Data "带允许打印一个分层的列表。为此,需要使用一个带子和一个数据源。层次结构必须在数据源中借助于两个数据列来定义:- 关键列。这是数据行的标识符。
- 列,包含这个项目的父项的键。
为了以分层形式打印这样的源,你需要设置以下 "Data "带属性。这可以在 "属性 "窗口中完成:
- 在 "IdColumn "属性中指出关键列;
- 在 "ParentIdColumn "属性中指出包含父值的列;
- 在 "Indent "属性中指出层次结构的缩进。
- EmployeeID列是关键,包含雇员的ID;
- ReportsTo列包含 "parent "员工的ID。
设置 "Data "带属性,它负责层次结构,方法如下:
当我们运行一个报告时,我们将看到以下内容:
当打印层次结构时,FastReport将带子向右移动(通过缩进属性中指示的值),同时也将带子宽度以相同的值减少。这使得你可以使用带子对象的锚定属性。下面是在这种情况下可以使用的该属性的可能值:
- 左、顶(默认)--对象随带子移动;
- 右,顶--对象保持在原来的位置;
- 左、右、顶--对象的右边保持在原来的位置,左边随带子移动。
在这个例子中,图片对象的Anchor属性被设置为Left, Top;带有职位名称的对象被锚定在Left, Right, Top;带有名字的对象被锚定在Right, Top。