3
votes

I'm using iReport v3.7.6 and JasperReports, I have a request to create a table where the first column acts to section/categorize the questions and answers displayed in the rest of the table. Example of requested output:

enter image description here

EDIT: For those of you not able to view the image, it is a 3-column table containing fields "Context", "Question", and "Answer". Each set of Question and Answer belongs to a single Context, which acts as a category for the set, and Context can act as a category for multiple sets of Question and Answer. The request is that it look something like this:

_________________________________
| Context1 | Question1 | Answer1 |
|          |___________|_________|
|          | Question2 | Answer2 |
|          |___________|_________|
|          | Question3 | Answer3 |
|          |___________|_________|
|          | Question4 | Answer4 |
|__________|___________|_________|
| Context2 | Question5 | Answer5 |
|          |___________|_________|
|          | Question6 | Answer6 |
|__________|___________|_________|

I know I can set iReport to not print repeated values, which solves part of my issue of not printing the Context on each line, but the second part of my problem is placing a cell border around the entire Context field so that it looks like the example above, that is, it looks like a dynamically expanding field that covers N number of rows. If I place a border around Context in the Details band of a report then I get the border for ever row in the table, resulting in a number of empty cells in the Context column. Is this kind of formatting possible using iReport 3.7.6? Would it be possible to group on the "Context" field and somehow place a border around the entire group?

Since the quantity of questions per Context category is known it would be possible to use flags in my dataset and conditionally style around the Context fields (e.g. flag set to "top" for first record in group and "last" for last record in group and style a frame's borders to show a top or bottom border according to flags), but that seems likes an awfully messy way of handling the issue. Plus, that bandage would break as soon as questions were dropped/added.

Another thought was creating a subreport that generated each Context individually, placing borders around the entire subreport, and combining the results in a master report's Detail band, but again that seems like a complex solution to an easy problem.

1

1 Answers

4
votes

I can't see the image you provided due to my company's filter.

Are you pertaining to border around a grouped data? If yes, you can put a static text scoping the whole group header band, then only specify the border for top, left and right and send it to back of all the headers. It should be sent to back (Right click > Send to Back)

<staticText>
    <reportElement positionType="Float" mode="Transparent" x="0" y="1" width="814" height="11" forecolor="#000000" backcolor="#F0F0F0"/>
    <box>
        <topPen lineWidth="0.75" lineColor="#CCCCCC"/>
        <leftPen lineWidth="0.75" lineColor="#CCCCCC"/>
        <rightPen lineWidth="0.75" lineColor="#CCCCCC"/>
    </box>
    <text><![CDATA[]]></text>
</staticText>

Then in the group's detail band, place another empty transparent static text that scopes the whole detail band, this time only specify the left and right borders.

In the group footer, place another empty transparent static text that scopes the whole group footer band and only specify the top border