java - Birt表动态格式化单元格

标签 java birt

是否可以在运行时动态格式化我的报告?我需要能够根据单元格的列和值设置单元格的样式。因此,如果 column3 有一个值为 23 .setStyleName("customStyle"); 的单元格。我正在使用 BIRT 4.2.2。

目前我有这样的东西:

// table detail
RowHandle tabledetail = (RowHandle) table.getDetail().get(0);
for (int i = 0; i < cols.size(); i++) {
    CellHandle cell = (CellHandle) tabledetail.getCells().get(i);
    DataItemHandle data = designFactory.newDataItem("data_" + cols.get(i));

    data.setResultSetColumn(cols.get(i));

    // data.getContent(from, cols.get(i)).getcontents();

    cell.getContent().add(data);

    // format every other columns
    if (i == 3) {
        cell.setStyleName("LabelHeader");
    }
}

但由于某种原因,这会更改第四列中每个单元格的背景颜色,而不是包含 3 的单元格的背景颜色。

我读了这个Eclipse Birt - Set style cell table dynamically with Event Handler唯一的答案是使用脚本。我不想使用脚本,我想更改 java 中的样式。

我需要能够评估单元格内容并据此设置样式。

最佳答案

您需要了解 BIRT 的工作原理才能理解为什么您的代码无法工作。 BIRT 有一个设计阶段(您没有任何值)。当呈现报表时,BIRT 将解析设计并按照某些规则扩展它(例如,它将复制数据表的模板行,以便数据库返回的每一行数据都获得一行输出,即使您的设计已只有一行)。

这意味着您无法在设计阶段实现您想要的目标 - 无法获得当时的值。

您需要的是事件处理程序或 dynamic formatting 。后者更简单。

如果您想使用事件处理程序,请 Hook 数据源的 onFetch 事件。从数据库中获取每一行后,它将触发。此时,您可以检查数据并更改模板。注意:您必须通过 setStyleName() 为每一行设置一个有用的值。因此,您必须有两种样式(“is not 3”和“is 3”)并应用适合的一种。

可以通过 Java 做到这一点,但最简单的解决方案实际上是编写一小段 JavaScript。然后,您可以使用 Java 代码在设计中安装这段 JavaScript。

理论上,您可以直接从事件处理程序调用 Java,但我从未见过任何有用的文档。

关于java - Birt表动态格式化单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30900838/

相关文章:

eclipse - 无法打开驱动程序 : org. eclipse.birt.report.data.oda.jdbc 的连接

java - 如何将默认表模型与表头同步?

java - 使用 BIRT 解析 XML

servlets - 无法在 Internet Explorer 8 中显示 SVG 图表

java - 使用 BIRT 和嵌入式 Tomcat 报告

java - 如何将多个连接传递给 birt Report?

java - Storm Spout/拓扑性能

java - 从可绘制对象设置背景墙纸

java - struts2 on tomcat项目显示空白页,使用Fiddler显示404错误

java - 如何在应用程序信息中添加选项(卸载更新)