示例 8.手动填充矩阵
在我们看过的所有示例中,矩阵都是自动填充数据的,因为它连接了数据源。矩阵的数据源在 "DataSource "属性中显示。虽然我们没有手动设置该属性的值,但在向矩阵添加数据列时,数据源会隐式出现。
使用脚本可以手动填充矩阵。为此,需要创建矩阵的 "ManualBuild "事件处理程序。在处理程序代码中调用 "AddValue "方法来添加数值。让我们演示如何创建一个矩阵,打印出以下 10х10 表格:
1 2 3 ...
1 1
2 2
3 3
... ...
请执行以下操作:
- 在报告中添加一个空矩阵;
- 将 "Data "窗口中的任意元素放入矩阵的行、列和单元格中。然后双击矩阵元素,调用表达式编辑器,清除表达式;
- 清除矩阵的 "DataSource"属性。
这些步骤都是为了创建一个只有一行、一列和一个单元格的 "虚拟 "矩阵。因此,矩阵将如下所示:
现在建一个 "ManualBuild "事件处理程序。为此,选择矩阵,进入 "Properties "窗口并按下按钮。双击 "ManualBuild "事件,FastReport 将创建一个空的事件处理程序。在其中写入以下代码:
private void Matrix1_ManualBuild(object sender, EventArgs e) { // Our matrix has one level in row, column and cell. // Create 3 arrays of object[] type, each with one element // (per number of levels). object[] columnValues = new object[1]; object[] rowValues = new object[1]; object[] cellValues = new object[1]; for (int i = 1; i <= 10; i++) { // Filling arrays columnValues[0] = i; rowValues[0] = i; cellValues[0] = i; // Adding data into the matrix Matrix1.AddValue(columnValues, rowValues, cellValues); } }
在处理程序中,应使用 "Matrix "对象的 "AddValue "方法来填充数据。该方法有三个参数,每个参数都是 System.Object 类型的数组。第一个参数是列值,第二个参数是行值,第三个参数是单元格值。请注意,每个数组中值的数量应符合对象的设置!在我们的例子中,一个对象在列、行和单元格中都有一个级别,因此我们为列、行和单元格分别提供一个值。
运行报告时,我们将看到以下内容:
让我们演示如何在矩阵的第 7 列和第 3 行的交叉点上添加数值 "21"。为此,请按以下方式修改代码:
private void Matrix1_ManualBuild(object sender, EventArgs e) { object[] columnValues = new object[1]; object[] rowValues = new object[1]; object[] cellValues = new object[1]; for (int i = 1; i <= 10; i++) { columnValues[0] = i; rowValues[0] = i; cellValues[0] = i; Matrix1.AddValue(columnValues, rowValues, cellValues); } columnValues[0] = 7; rowValues[0] = 3; cellValues[0] = 21; Matrix1.AddValue(columnValues, rowValues, cellValues); }