FastReport中国社区FastReport联系电话 联系电话:023-68661681

如何利用Report.CustomCalc事件实现预处理输入数据

来源:   发布时间:2017-12-14   浏览:3480次

【点击下载FastReport .Net v2018.1最新版本】

在评估对象中的表达式或来自数据源的数据时,将调用报表对象的 New CustomCalc 事件。所以,我们可以使用这个事件来拦截数据并将其替换。这种操作什么时候会有用呢?比如,在接收到的数据中,有必要过滤数值或将其替换为其他行。

我们来看一个例子。创建一个简单的WindowsForms应用程序,将数据源添加到项目和DataSet组件中。另外,我们把报表组件放在表单上。

在报表组件的下拉菜单中,选择“Select Data Source”项:

如何实现预处理输入数据

并选择我们的数据源。

现在从同一菜单中选择“Design Report”项。为了演示,我从Employee表中添加了几个字段:

如何实现预处理输入数据

感兴趣的人可以看看现在报表的外观:

如何实现预处理输入数据

保存报表并关闭报表设计器。让我们在表单中添加一个按钮,以及按钮点击事件:

private void Run_Click(object sender, EventArgs e)
 
 {
 
 report1.Load("D://Reports//Simple.frx");
 
 report1.Prepare();
 
 report1.ShowPrepared();
 
 }

这些都是老生常谈了。我上传了以前创建的报表,然后加载并显示它。

现在为report1对象添加CustomCalc事件:

如何实现预处理输入数据

private void report1_CustomCalc(object sender, FastReport.CustomCalcEventArgs e)
 
 {
 
 if (e.CalculatedObject.Equals("Roberto") )
 
 {
 
 e.CalculatedObject = "Test Name";
 
 }
 
 }

在这里,我们拦截所需的数据并将其替换。所有数据在构建报表期间通过CalculatedObject对象传递,我们捕捉到我们需要的数据“Roberto”,并替换它们。

你可以替换整个数据字段。在这种情况下,条件将如下所示:

if (e.Expression.IndexOf("employee.FirstName") != -1)

我们直接在事件处理句柄CustomCalc中编写数据替换的代码。你也可以直接在代码中分配事件处理句柄,例如,在MVC应用程序中。在应用程序代码中一个方便的地方我们编写:

report1.CustomCalc += FReport_CustomCalc;

以及处理句柄:

private void FReport_CustomCalc(object sender, CustomCalcEventArgs e)
 
 {
 
 if (e.Expression.IndexOf("Employees.FirstName") != -1)
 
 { 
 
 e.CalculatedObject = "Test Name";
 
 }
 
 }

运行应用程序。点击按钮以查看报表:

如何实现预处理输入数据

让我们来比较一下这个截图和之前的做法。如你所见,员工Roberto的第一个条目和名字被置于一个条件中,并被“Test Name”取代。

综上,我们有办法替换报表中的一些数据,对于有复杂报表需求的用户来说这会非常有用。

产品介绍 | 下载试用 | 优惠活动 | 在线客服 | 联系Elyn

 

推荐阅读

联系我们
  • 重庆总部 023-68661681
购买
  • sales@evget.com
合作
  • business@evget.com


扫码咨询
电话咨询
023-68661681
返回
顶部