2012-01-17 5 views
4

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

Вначале я пытался объединить список компонентов и подчиненный отчет. Но оказалось, что компонент списка не поддерживает горизонтальную компоновку. Вместо этого я прочитал где-то использовать кросс-таблицу. Но когда я пытаюсь вставить подрепорт в ячейку измерения, iReport отображает сообщение, которое я не могу сделать. Так что я могу сделать?

+0

Я не совсем понимаю ваши требования. Вы сказали, что хотите использовать компонент «Список», но это не поддерживает «Горизонтальный» макет. Итак, вы думаете об использовании crosttab, чтобы отображать список элементов по горизонтали? Это то, что вы хотите? – bchetty

+0

Что касается использования подрепортажа внутри кросс-таблицы (согласно вашему названию), я никогда не пробовал этого или не думал об этом ... и я бы рекомендовал не делать этого. Остерегайтесь использования функции «Stretch» ​​в кросс-таблице, которая может привести ваше приложение к бесконечным задачам цикла. – bchetty

+0

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

ответ

5

Основываясь на вашем предыдущем комментарии, я бы сказал, что печатать список элементов по горизонтали не так сложно. Компонент List - это в основном подчиненный отчет. Таким образом, вы также можете создать собственный компонент List, который печатает список элементов по горизонтали. Все, что вам нужно, это создать новый отчет без каких-либо полей, установить его «Заказ печати» на «Горизонтально» и установить количество столбцов согласно вашим требованиям. Затем вы можете вставлять этот отчет как подчиненный в некоторый основной отчет и печатать элементы по горизонтали.

В соответствии с вашими требованиями вы можете соответствующим образом настроить размер отчета и текстового поля. Вот скриншот для этого отчета я создал:

enter image description here

А вот образец jrxml документ, который я создал:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" columnCount="5" printOrder="Horizontal" pageWidth="595" pageHeight="842" columnWidth="119" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0"> 
    <property name="ireport.zoom" value="1.0"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="0"/> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band splitType="Stretch"/> 
    </title> 
    <pageHeader> 
     <band splitType="Stretch"/> 
    </pageHeader> 
    <columnHeader> 
     <band splitType="Stretch"/> 
    </columnHeader> 
    <detail> 
     <band height="20" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="0" width="100" height="20"/> 
       <textElement textAlignment="Center" verticalAlignment="Middle"/> 
       <textFieldExpression><![CDATA[$F{field}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
    <columnFooter> 
     <band splitType="Stretch"/> 
    </columnFooter> 
    <pageFooter> 
     <band splitType="Stretch"/> 
    </pageFooter> 
    <summary> 
     <band splitType="Stretch"/> 
    </summary> 
</jasperReport> 
+0

Хорошо. Насколько я понял, вы предлагаете установить достаточное количество столбцов страницы во время создания отчета (например, 6). И позже используйте только некоторые из них (например, первые 3 из них). Это имеет смысл. – emstol

0

@bchetty: К сожалению, я решил ответить, а не комментарий, как я не для этого достаточно репутации. Решение, отправленное вами, отлично работает, но оставляет макет отчета довольно не Ok. У меня было знакомое требование, когда я сохранил размер столбцов как 20, но тогда я никогда не могу предсказать, что он не будет пересекать 20 в каком-то запросе. Опять же, если из запроса для столбцов извлекаются только три значения, остальные пространства столбцов остаются пустыми и не дают хорошего макета для генерируемого отчета.

Я прочитал в iReport окончательную справочную книгу, что, если Список используется в качестве вспомогательного отчета, а printOrder «горизонтальный», мы можем получить эффект динамических столбцов. Но я думаю, что это всего лишь «эффект», а не фактически динамические столбцы, так как размер столбцов должен быть зафиксирован на некотором значении, превышающем 1.

Я нахожусь в конце, пытаясь добиться этого, но я думаю, мне, возможно, придется сдаваться. Crosstab не может прийти на помощь, поскольку он ограничен двумя группами строк и двумя группами столбцов. Но в отчете есть другие поля, которые также должны быть напечатаны вместе с динамическими столбцами. Printing a sub report data horizontally

Смежные вопросы