powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / iReport. Как спрятать графики в отчете если значение некоторых графиков пустое?
3 сообщений из 3, страница 1 из 1
iReport. Как спрятать графики в отчете если значение некоторых графиков пустое?
    #37967752
rail13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iReport. Как спрятать графики в отчете если значение некоторых графиков пустое?
...
Рейтинг: 0 / 0
iReport. Как спрятать графики в отчете если значение некоторых графиков пустое?
    #38293760
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rail13,

Решил проблему? Поделись результатами :)

У меня в отчете есть таблица и график. В таблице некоторые столбцы прячутся в зависимости от входного параметра (просто boolean на каждый столбец). Вот хочется их и в графике не выводить.

Тип графика = XY Bar Chart
Type of dataset = Time period dataset
(если это принципиально для решения проблемы)
...
Рейтинг: 0 / 0
iReport. Как спрятать графики в отчете если значение некоторых графиков пустое?
    #38299525
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что имел в виду топикстартер непонятно - слишком размыто сформулировано

То что подошло мне:

Самое простое решение по подавлению графика - сформировать массив данных для DataSource из элементов равных null :)

Добавил параметр отчета (jrxml)
boolean[] legendItemsDisplayed
с признаками выводить или нет нужный столбец в таблице и соответствующую Time Periods Series
В java-классе формирования DataSource если !legendItemsDisplayed[номер столбца таблицы и timePeriodSeries] , то в данные писать null. В моем случае считывается через getFieldValue, так как таблица и график в сабрепорте, ну это на любителя:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
   /**
     * @see net.sf.jasperreports.engine.JRDataSource#getFieldValue(net.sf.jasperreports.engine.JRField)
     */
    public Object getFieldValue(JRField jrf) throws JRException {
        if (jrf.getName().equals("firstFieldName") && displayed[indexFirstFieldName]) {
        	return значение;
        }          
        ... тра-та-та остальные поля

        return null;       
    }  



В этом случае в графике данные и не выводится. Правда отображается легенда. Для ее подавления пришлось написать customizer.
Которому дается на вход тот же boolean[]

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class R1240XYBarCustomizer extends JRAbstractChartCustomizer implements JRChartCustomizer {
	
	/**
	 * Кастомайзер для бар-графика. <br> 
     * Ненужные легенды подавляются
	 */
    @Override
	public void customize(JFreeChart chart, JRChart jasperChart) {
    	
    	boolean[] displayedLegendItems = (boolean[]) getParameterValue("legendItemsDisplayed");
    	
		XYPlot plot = (XYPlot) chart.getPlot();
		LegendItemCollection source = plot.getLegendItems();
		
		LegendItemCollection dest = new LegendItemCollection();
		for (int i=0; i<source.getItemCount(); i++) {
			if (displayedLegendItems[i]) {
				dest.add(source.get(i));
			}
		}
		plot.setFixedLegendItems(dest);	
    }
}	



Ну и все готово. Наибольший гемор был даже не в графиках у меня, а в совмещении таблицы и графика в одном отчете. Вообще таблицы в jasper вещь мощная, но заморочная какая-то. То тут, то там всякие чудяса в них вылезают
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / iReport. Как спрятать графики в отчете если значение некоторых графиков пустое?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]