报表生成器FastReport .Net用户指南:表格式报告

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。

FastReport.NET官方版下载(585577353)icon-default.png?t=N7T8https://www.evget.com/product/1861/download

配置列

您可以通过右键菜单添加或删除列。

  • 选择表格或其任何元素,然后将光标放在需要的列上。光标的形式将变为一个黑色小箭头。

fastreport

  • 左键单击,选择列;
  • 右键单击,以显示列的右键菜单;
  • 如果您需要选择多个相邻的列,请左键单击,然后在不离开鼠标的情况下,向右或向左移动鼠标,以选择相邻的列。

列的右键菜单也可以在 "Report Tree"窗口中调用。打开该窗口,选择需要的列并单击鼠标右键。

管理列的大小

您可以使用以下方法之一设置列的宽度:

  • 选择表格或其任何元素,并将光标置于两列之间的边界上。光标的形式将变为水平分割器:、

  • 选择一列并在 "Width "属性中指定所需的宽度。该属性可在 "Properties "窗口中访问。

您也可以启用 "AutoSize "列属性。在运行报表时,将自动计算列的宽度。为了限制列的宽度,您可以指定 "MinWidth "和 "MaxWidth "属性。

列宽不应大于页面宽度。

配置行

行的配置方式相同。要选择一行,请执行以下操作:

  • 选择表格或其任何元素,并将光标置于所需行的左侧。光标的形式将变为一个黑色小箭头:

fastreport

  • 单击鼠标左键,以选择行;
  • 右击鼠标,显示该行的右键菜单。

如果您需要选择相邻的几行,则左击鼠标,然后在不离开鼠标的情况下,向右或向左移动鼠标,以选择相邻的行。

管理行的大小

您可以使用以下方法之一设置行的高度:

  • 选择表格或其任何元素,并将光标放在两行之间的边界上。光标的形式将变为垂直分割器:

fastreport

左击并移动鼠标,以改变行的大小。

  • 选择行,并在 "Height "属性中指定所需的高度。在 "Properties "窗口中可以访问该属性。

您还可以启用行的 "AutoSize "属性。运行报表时,将自动计算行的高度。为了限制行的高度,可以使用最小高度("MinHeight")和最大高度("MaxHeight")属性:行的高度不应大于页面高度。

配置单元格

单元格是文本对象。从本质上讲,单元格类继承自 "Text "对象。上面提到的关于 "Text "对象的所有内容同样适用于表格的单元格。

编辑单元格的文本就像编辑 "Text "对象一样。此外,您还可以将 "Data "窗口中的元素拖放到单元格中。

单元格的边框和填充可以通过 "Border and Fill "工具栏进行配置。

要调用单元格的右键菜单,只需右击该单元格即可。

连接和拆分单元格

您可以连接表格中相邻的单元格,形成一个大单元格。

  • 用鼠标选择第一个单元格;
  • 左键单击并移动鼠标,选择单元格组;
  • 在选中的区域上单击鼠标右键,以显示单元格的右键菜单;
  • 在右键菜单中选择 "Join cells"。

fastreport

要分割单元格,请调用其上下文菜单并选择 "Split cell"项。

在单元格中插入对象

您可以在单元格中插入其他对象,例如图片。以下对象不能添加到单元格中:

  • "Table"
  • "Matrix"
  • "Subreport"

fastreport

要在单元格中添加对象,只需将其拖入单元格即可。您可以在单元格之间自由移动对象,也可以将其带回表格边界之外。

单元格是放置对象的容器。这意味着,您可以使用单元格内对象的 "Dock "和 "Anchor "属性。当单元格的大小发生变化时,可以改变对象的大小。

打印表格

表格可以两种模式打印:

在第一种模式下,表格打印在其所属的带内,外观与设计器中的相同。在这种模式下,如果表格的宽度大于报表页面的宽度,则表格不会跨页打印。这是默认的打印模式。

第二种模式是动态模式。在这种模式下,表格在脚本的帮助下生成。在此过程中,生成的表格可能不同于初始表格,就像FastReport准备的报表不同于报表模板一样。在动态模式下,如果表格不适合在报告页面上显示,则可以将其分割成不同的页面。

在动态模式下,表格不会被打印在放置它的带子上。取而代之的是,表格本身会生成一组带,其中包含所生成表格的部分内容。这种工作模式有以下限制:

  • 切勿在表格下方或附近放置其他物体。取而代之的是使用 "Child "带;
  • 切勿将两个 "Table "对象放在一个带中。

让我们详细了解一下动态模式。

 
 
这种模式与编程有关,需要报表开发人员具备更高

表格的形成是在脚本的帮助下完成的。为了创建脚本,请选择 "Table "对象,在 "Properties "窗口中单击 "Events"按钮并双击 ManualBuild 事件:

fastreport

一个空的事件处理程序就会被添加到报告代码中:

在这种模式下,源表被用作模板。在事件代码中,您可以根据需要多次打印源表中的行和列。在此过程中,将形成结果表,其中可包含无限数量的行和列。如果在报告页面中无法容纳,则可以将表格分割成不同的页面。

打印表格时,将使用 "Table "对象的以下方法:

Method Parameters Description
PrintRow int index 打印指定索引的行。行号从0开始。
PrintColumn int index 打印指定索引的列。列编号从0开始。
PrintRows int[] indices 打印表格的若干行。
PrintRows - 打印表格的所有行。
PrintColumns int[] indices 打印表格的若干列。
PrintColumns - 打印表格的所有列。
PageBreak - 在打印下一列或下一行之前插入分页符。

打印表格可使用以下方法之一:

第一种方法 - 从上到下打印,然后从左到右打印。这种方法更适合行数不固定的表格。您必须按照以下顺序调用这些方法:

  • PrintRow(行索引);
  • 一次或多次调用 PrintColumn(column index) 或 PrintColumns(columns indices) 方法打印指定的列;
  • 或调用一次 PrintColumns() 方法打印所有列;
  • 重复该序列以打印表格中所有需要的行。
表格的每一行必须包含相同数量的列。在使用 PrintColumn(int index) 和 PrintColumns(int [] indices) 方法时,请记住这一点。

第二种方法 - 从左到右打印,然后从上到下打印。这种方法更适合打印列数不固定的表格。您必须按照以下顺序调用这些方法:

  • PrintColumn(列索引);
  • 一次或多次调用PrintRow(行号)或PrintRows(行索引)来打印指定的行;
  • 或者调用一次PrintRows()方法打印所有行;
  • 重复上述顺序,打印表格中所有需要打印的列。
表格的每一列必须包含相同数量的行。在使用 PrintRow(int index) 和 PrintRows(int [] indices) 方法时,请记住这一点。

违反调用打印方法的顺序会导致在执行报表时出错。其中一个错误是试图使用以下代码打印表格:

Table1.PrintRows();  Table1.PrintColumns()

这种方法顺序是不正确的。您应从 PrintRow 或 PrintColumn 方法开始打印表格。

打印复杂页眉

这里我们讨论的是包含跨单元格的表头。当打印包含跨单元格的表格的行或列时,单元格的尺寸会自动增大。我们将在下一个示例中进行演示:

fastreport

private void Table1_ManualBuild(object sender, EventArgs e)
{
  // printing row 1 and columns 0, 0, 0, 1
  Table1.PrintRow(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(1);
  // printing row 1 and columns 0, 0, 0, 1
  Table1.PrintRow(1);
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(1);
}

我们将创建一个ManualBuild事件处理程序,它将打印第一列3次,第二列1次:

我们在每一行中打印了相同数量的列。如果违反这一规则,我们将得到意料之外的结果。

执行该代码的结果如下:

 />

如图所示,标题单元格被自动跨过。我们将使代码更复杂一些,以便打印两组列:

private void Table1_ManualBuild(object sender, EventArgs e)
{
  // print 0 row and two groups of 0, 0, 0, 1 columns
  Table1.PrintRow(0);
  // group 1
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(1);
  // group 2
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(1);

  // print 1 row and two groups of 0, 0, 0, 1 columns
  Table1.PrintRow(1);
  // group 1
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(1);
  // group 2
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(0);
  Table1.PrintColumn(1);
}

当我们运行报告时,我们将看到以下结果:

当使用以下代码打印第二列时:

Table1.PrintColumn(1);

页眉结束,继续打印第一列开始新的页眉:

// group 2
Table1.PrintColumn(0);
使用总数

在 "Table"对象的动态模式下,支持以下全部功能:

Function Parameters Description
Sum TableCell cell 返回单元格中包含的数值之和。
Min TableCell cell 返回单元格中数值的最小值。
Max TableCell cell 返回单元格中数值的最大值。
Avg TableCell cell 返回单元格中数值的平均值。
Count TableCell cell 返回包含指定单元格的行数。
在普通打印模式下(非动态),这些功能无效。

要使用合计函数,请将其置于表格的单元格中。如以下函数计算名为 "Cell1 "的单元格中包含的值之和:

[Sum(Cell1)]

在此过程中,我们将分析位于当前单元格(我们正在其中计算总和)上方和左侧的所有单元格。

表格布局

动态生成的表格可在页面间自动分割。这种行为由表格的 "Layout "属性控制。您可以选择以下值之一:

Value Description
AcrossThenDown 表格先横后竖
DownThenAcross 表格先下后上。
Wrapped 宽表格被包裹并在同一页面渲染。

猜你喜欢

转载自blog.csdn.net/m0_67129275/article/details/132827586