Birt动态格式化单元格

时间:2015-06-17 19:36:56

标签: 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风格的脚本。

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

1 个答案:

答案 0 :(得分:0)

您需要了解BIRT如何运作才能理解您的代码无法正常工作的原因。 BIRT有一个设计阶段(你没有任何价值观)。呈现报表时,BIRT将解析设计并按照某些规则对其进行扩展(例如,它将复制数据表的模板行,以便为数据库返回的每行数据获取一行输出,即使您的设计具有只有一行)。

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

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

如果要使用事件处理程序,请挂钩数据源的onFetch事件。它将在从数据库中提取的每一行之后触发。此时,您可以检查数据并更改模板。注意:您必须通过setStyleName()为每一行设置一个有用的值。所以你必须有两种风格(&#34;不是3&#34;&#34;是3&#34;)并应用适合的风格。

可以从Java那样做,但最简单的解决方案是编写一小段JavaScript。然后,您可以使用Java代码在设计中安装此JavaScript。

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