如何在rowcreate中操作行单元格

Birt - how to manipulate row cells onrowcreate

本文关键字:操作 单元格 rowcreate      更新时间:2023-09-26

我是新来的Birt脚本,需要一些脚本的帮助。我想在表格中逐行合并单元格,如果它们包含相等的数据。例如下面这个表

 ------- ------- -------
|  id1  |   2   |   4   |
 ------- ------- -------
|  id2  |   5   |   5   |
 ------- ------- -------

应该看起来像

 ------- ------- -------
|  id1  |   2   |   4   |
 ------- ------- -------
|  id2  |       5       |
 ------- ------- -------

我发现了一些例子,现在我可以根据行数据更改行背景onrowcreate:

if (this.getRowData().getExpressionValue(1) == "id1")
this.getStyle().backgroundColor = "red";
if (this.getRowData().getExpressionValue(1) == "id2")
this.getStyle().backgroundColor = "blue"; 

另一个例子展示了如何合并表头中的单元格beforeFactory:

importPackage( Packages.org.eclipse.birt.report.model.api );
elementFactory = reportContext.getDesignHandle().getElementFactory();
var mytable = reportContext.getDesignHandle().findElement("mytable");
var myheader = mytable.getHeader( ).get( 0 );
tcell = myheader.getCells( ).get( 1 ).drop();
tcell = myheader.getCells( ).get( 0 );
tcell.setColumnSpan(2);
tcell.setRowSpan(1);

两个例子都工作得很好,但我需要检查是否有相同的数据在单元格合并之前,我可以做一些类似于beforeFactory脚本onrowcreate,或者可能有不同的方式。

谢谢!

一旦创建了表,就不可能合并单元格,所以这需要在beforeFactory事件中完成,这对您不起作用,因为它在看到您的数据集之前运行。

根据表的复杂程度,创建两个详细行可能是有意义的,一个有合并的列,一个没有。然后,可以根据行中的数据动态隐藏不想使用的详细行。