2010-12-16 4 views
1

Ich habe zwei Probleme:Wie kann ich die Anzahl der Zeilen im Detailband angeben?

1 - Ich möchte die Anzahl der Zeilen angeben, die auf jeder Seite meines Berichts angezeigt werden müssen.

2 - Wenn die Anzahl der abgerufenen Zeilen aus der Datenquelle geringer als die zum Füllen der Seitenhöhe benötigte Menge ist, möchte ich den verbleibenden Platz mit leeren Zeilen füllen (jede Zeile wird anhand ihrer Feldgrenzen unterschieden). Wenn beispielsweise 50 Zeilen auf jeder Seite & angezeigt werden können, gibt es nur 20 Datenzeilen, die aus der Datenquelle abgerufen wurden. Anschließend möchte ich 30 leere Zeilen nach der letzten gedruckten Zeile drucken. Bedenken Sie, dass ich dies nicht tun kann, wenn ich meine sql select-Anweisung ändere.

Kann mir bitte jemand helfen?

Antwort

2

Ich hatte ein ähnliches Problem, und hier ist ein wie ich das gelöst habe.

Zuerst benötigen Sie einen Parameter (oder Variable vielleicht) mit der Gesamtzahl der Zeilen, und Sie benötigen die enthaltene Variable Group_COUNT, "Group" wird den Namen Ihrer Gruppe widerspiegeln.

Ich hatte einen Parameter namens "IDS", ein List<Integer> in der Abfrage verwendet, um die Daten zu erhalten, $P{IDS}.size() gibt mir die Anzahl der Zeilen. Ich denke du kannst auch die mitgelieferte Variable "REPORT_COUNT" verwenden.

Dann die nervigste Teil, müssen Sie das Detail-Band lang genug, um alle Ihre Daten (in meinem Fall, 8 Zeilen), und fügen Sie ein Bild (oder Text-Komponente) in jeder Zeile. Diese Komponente müssen zwei Eigenschaften festgelegt haben „Remove Line Wenn Blank“ und „Print When Expression“, das erste in der wahren und der zweite mit der folgenden Bedingung:

new Boolean($P{IDS}.size() < 2 && $P{IDS}.size() == $V{Group_COUNT}.intValue()) 

Sie $P{IDS}.size() ersetzen müssen mit Der Ausdruck, der die Anzahl der Abfragezeilen widerspiegelt, und die Zahl 2 mit der Zeilennummer. Wenn Sie mindestens eine Zeile haben, können Sie # 1 überspringen. Beginnen Sie mit 2 und fügen Sie für jede Zeile 1 hinzu, in Ihrem Fall bis zu 50! (Sorry!)

0

ich Sie mit Ihrer zweiten Anfrage helfen können:

  1. hinzufügen TextField- mit dieser relativen Position

    • links: 1 Pixel
    • top: 1 Pixel
  2. 50 Mal in "\ n \ n ..." einfügen. Das druckt immer 50 Zeilen.

  3. Ändern Sie die Größe Ihres Textes

    • Breite: 1 Pixel
    • Höhe: 15 Pixel
  4. Tick Option: Strecht bei Überlauf.

Grüße

2

hatte ich das gleiche Problem, war meine Lösung die 'leeren' Zeilen trought die SQL (ORACLE in meinem Fall) erhalten sieht die Abfrage wie folgt:

Select first_field, second_field, etc.. 
from my_table WHERE my_condition=${parameter} 
UNION ALL 
SELECT NULL,NULL, etc.. 
FROM EXISTING_TABLE_WITH_ROWS WHERE ROWNUM < 40 - (SELECT COUNT(*) FROM my_table WHERE my_condition = ${parameter}) 

Diese Erstellen Sie jetzt die leeren Zeilen oben. Wenn Sie keine Änderung sehen, versuchen Sie, ein Feld oder ein Label mit der Eigenschaft 'Zeile entfernen wenn leer' zu setzen Ich hoffe, diese Hilfe