Birt table 动态格式化单元格
Birt table dynamically format cells
是否可以在 运行 时动态格式化我的报告?我需要能够根据单元格的列和值设置单元格的样式。所以如果 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 会解析设计并按照一定的规则展开它(例如,它会复制数据表的模板行,这样你的数据库 returns 甚至每行数据都会得到一行输出尽管您的设计只有一行)。
这意味着您无法在设计阶段实现您想要的 - 当时无法获得这些值。
您需要的是事件处理程序或 dynamic formatting。后者更简单
如果要使用事件处理程序,则挂接到数据源的onFetch
事件。它会在从数据库中获取的每一行之后触发。这时,您可以检查数据并更改模板。注意:您必须通过 setStyleName()
为每一行设置一个有用的值。因此,您必须有两种样式("is not 3" 和 "is 3")并应用适合的样式。
可以从 Java 开始,但最简单的解决方案实际上是编写一小段 Java 脚本。然后你可以使用Java代码在设计中安装这段Java脚本。
理论上您可以直接从事件处理程序调用 Java,但我从未见过任何有用的文档。
是否可以在 运行 时动态格式化我的报告?我需要能够根据单元格的列和值设置单元格的样式。所以如果 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 会解析设计并按照一定的规则展开它(例如,它会复制数据表的模板行,这样你的数据库 returns 甚至每行数据都会得到一行输出尽管您的设计只有一行)。
这意味着您无法在设计阶段实现您想要的 - 当时无法获得这些值。
您需要的是事件处理程序或 dynamic formatting。后者更简单
如果要使用事件处理程序,则挂接到数据源的onFetch
事件。它会在从数据库中获取的每一行之后触发。这时,您可以检查数据并更改模板。注意:您必须通过 setStyleName()
为每一行设置一个有用的值。因此,您必须有两种样式("is not 3" 和 "is 3")并应用适合的样式。
可以从 Java 开始,但最简单的解决方案实际上是编写一小段 Java 脚本。然后你可以使用Java代码在设计中安装这段Java脚本。
理论上您可以直接从事件处理程序调用 Java,但我从未见过任何有用的文档。