是否可以在运行时动态格式化我的报告?我需要能够根据单元格的列和值来设置单元格的样式。因此,如果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风格的脚本。
我需要能够评估单元格内容并根据它设置样式。
答案 0 :(得分:0)
您需要了解BIRT如何运作才能理解您的代码无法正常工作的原因。 BIRT有一个设计阶段(你没有任何价值观)。呈现报表时,BIRT将解析设计并按照某些规则对其进行扩展(例如,它将复制数据表的模板行,以便为数据库返回的每行数据获取一行输出,即使您的设计具有只有一行)。
这意味着您无法在设计阶段实现您想要的目标 - 当时无法获得价值。
您需要的是事件处理程序或dynamic formatting。后者更简单。
如果要使用事件处理程序,请挂钩数据源的onFetch
事件。它将在从数据库中提取的每一行之后触发。此时,您可以检查数据并更改模板。注意:您必须通过setStyleName()
为每一行设置一个有用的值。所以你必须有两种风格(&#34;不是3&#34;&#34;是3&#34;)并应用适合的风格。
可以从Java那样做,但最简单的解决方案是编写一小段JavaScript。然后,您可以使用Java代码在设计中安装此JavaScript。
理论上你可以直接从事件处理程序调用Java,但我从未见过任何有用的文档。