2015-06-17 15 views
0

Возможно ли динамическое форматирование моего отчета во время выполнения? Мне нужно уметь устанавливать стиль ячейки на основе того, какой столбец и значение ячейки. Поэтому, если столбец3 имеет ячейку со значением 23 .setStyleName ("customStyle") ;. Я использую BIRT 4.2.2.Birt динамическое форматирование ячеек

В настоящее время у меня есть что-то вроде этого:

// 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

Вам нужно понять, как работает BIRT, чтобы понять, почему ваш код не может работать. BIRT имеет этап проектирования (где у вас нет значений). Когда отчет отображается, BIRT будет анализировать дизайн и расширять его в соответствии с определенными правилами (например, он скопирует строки шаблонов таблиц данных, чтобы вы получили одну строку вывода для каждой строки данных, возвращаемую вашей базой данных, даже если ваш дизайн имеет только одна строка).

Это означает, что вы не можете достичь того, чего хотите на этапе проектирования - в то время невозможно получить значения.

Вам нужен либо обработчик событий, либо dynamic formatting. Последнее более просто.

Если вы хотите использовать обработчик событий, то подключите его к событию источника данных onFetch. Он будет запускаться после каждой строки, полученной из базы данных. В это время вы можете просмотреть данные и изменить шаблон. Примечание. Вы должны установить полезное значение через setStyleName() для каждой строки. Таким образом, вы должны иметь два стиля («не 3» и «равно 3») и применять тот, который подходит.

Это можно сделать с Java, но самым простым решением является написать небольшой фрагмент JavaScript. Затем вы можете использовать Java-код для установки этого фрагмента JavaScript в проекте.

Вы могли бы в теории вызвать Java непосредственно из обработчиков событий, но я никогда не видел никакой полезной документации для этого.

+0

Есть ли способ сделать это динамическое форматирование без конструктора отчетов? также есть ли у вас какие-либо ресурсы, как это сделать с помощью скриптов. Я не хотел делать это с помощью скриптов, но если я не смогу сделать это так, как я изначально думал, что я бы сделал, возможно, просто лучше всего сделать это в скрипте. –

+0

Дизайнер просто называет методы в дизайне BIRT, поэтому вы можете делать все сами ... если вы можете найти правильный метод для использования. Я не использовал BIRT какое-то время, поэтому я не могу рекомендовать книгу, но вы можете попытаться купить несколько последних или просто потратить некоторое время на вызов разных API, чтобы посмотреть, что они делают. –