2012-01-17 105 views
4

要素を水平に(1つの「行」で)表示したい。私はこの問題を、ある行と動的な列数を持つ表のように想像しています。この表の各セルには、同じサブレポートが含まれていますが、データソースは異なります。カスタム数の要素を水平に表示する方法は?

最初は、コンポーネントリストとサブレポートを結合しようとしていました。しかし、リストコンポーネントは水平レイアウトをサポートしていないことが判明しました。代わりにクロス集計を使用するためにどこかを読んでいます。しかし、サブレポートをメジャーセルに挿入しようとすると、iReportは私がそれを行うことができないというメッセージを表示します。じゃあどうすればいい?

+0

私はあなたの要件を正確には理解していません。あなたは 'リスト'コンポーネントを使用したいと言ったが、それは '水平'レイアウトをサポートしていない。だから、クロスタブを使って要素のリストを水平に表示することを考えている?それはあなたが欲しいものですか? – bchetty

+0

クロス集計内のサブレポートを(タイトルごとに)使用する場合、私はそれを試みたり考えたりしていません。クロス集計で「ストレッチ」機能を使用することに注意してください。アプリケーションが無限ループの問題に陥る可能性があります。 – bchetty

+0

Hm ..要素を水平方向に(1つの「線」内に)表示したい。私はこの問題を、1つの行と動的な列の列を持つテーブルのように想像しています。この表の各セルには、同じサブレポートが含まれていますが、データソースは異なります。 – 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:私は私がいないとコメントするのではなく答えることにしました申し訳ありませんそうするには十分な評判がある。あなたが投稿した解決策はうまくいきますが、レポートレイアウトはかなりNot Okです。私は20のようにカラムのサイズを保持していたが、それからそれがあるクエリーで20を越えないとは決して予測できない、スミラの要件を持っていました。この場合も、列の問合せから3つの値しかフェッチされない場合、残りの列スペースは空のままであり、生成されたレポートのレイアウトは適切ではありません。

iReport究極のガイドブックでは、Listがサブレポートとして使用されていて、printOrderが "horizo​​ntal"であれば動的列の効果を得ることができます。しかし、これはちょうど "効果"であり、列サイズは1より大きな値に固定しなければならないので、実際の動的列ではないと思います。

これを達成しようとしていますが、あきらめる。クロス集計は、2つの行グループと2つの列グループによって制限されるため、救済することはできません。しかし、このレポートには、動的な列と共に印刷する必要がある他のフィールドがあります。 Printing a sub report data horizontally

関連する問題