JasperReport Datenausgebe zeilenweise formatieren

Matthias_Mac

Grünschnabel
Hallo Leute,

ich hab da mal eine Frage.
Seid 2 Wochen komme ich nun mit Jasper in Berührung und kann auch schon ein Report erstellen. ;)
Den Report habe ich vorbereitet mit dem Tool iReport, den Aufruf starte ich nun über ein Tool das ich in Java entwickle.
Den SQL-String und die Connection übergebe ich In den Parametern.
Aus der Datenbank lese ich einfach nur ID, Vorname und Nachname aus.

Super alles klappt, ich bekomme meine 20 Einträge auch angezeigt.
Nun muss ich aber für später die Reihen unterschiedlich einfärben z.B. erste Reihe grau zweite Reihe weiß oder anders.

Meine Frage lautet nun wie kann ich das realisieren das ich z.B. jede zweite Reihe anders einfärbe.

Ich hoffe jemand kann mir helfen.

Vielen Dank im Voraus

Matthias
 
Hi
Die Frage die sich mir nun stellt ist, willst du die Formatierung zur Laufzeit anpassen?
Jede zweite Zeile grau einfärben wäre ja nichts was erst zur Laufzeit bekannt wird.
Falls aber doch hast du dir was lustiges vorgenommen ;)


Zur Laufzeit:
Ich kann jetzt nur für bis und mit JapserReport 1.3 sprechen. Aber denke beim neuen hat sich das nicht geändert.
Formatierungen kannst du in einem kompilierten Report nicht mehr ändern. Du musst also den Report zu Laufzeit kompilieren.
Konkreter:
- Die Daten musst du schon in deinem Programm sammeln (du willst ja anhand der Daten die Formatierung ändern nehme ich an)
- Nun musst du den umkompilierten Report(.jrxml File) bearbeiten, farben setzen, Textformatierung ändern, was du halt so willst.
- Den Report compilieren (Hoffen dass du im jrxml nichts falsch gemacht hast und es keinen Compilererror gibt)
- Den Report mit den oben gesammelten Daten starten.


Wenns nur darum geht jede zweite Zeile grau zu machen brauchst du das alles natürlich nicht. Habe ich noch nie gemacht, aber denke mit ein bisschen tricksen ist das schon möglich. Z.B. ihrgendwie so:
- Im Detailfeld 2 Subreports untereinander packen. Einer ist weiss der andere grau
- Beim Sammeln der Datensätze immer gleich zwei Datensätze zu einem zusammenfassen (Must du beim SQLQuery vielleicht ein bisschen tricksen)
- dem ersten Subreport den ersten Teil des Datensatzes übergeben, dem zweiten Subreport den zweiten Teil.

Wenn du aber noch ganz neu zu JasperReport bist würde ich, sofern es geht, solche Spielereien noch warten lassen bis du ein bisschen Erfahrung mit Japser/iReport hast ;)


Gruss und viel Erfolg
 
Hallo,

vielen Dank schon mal dafür, jetzt stellt sich mir die Frage "Wie greife ich auf wärend der Laufzeit auf den Report(.jrxml) zu?"

bisher mache ich das so

Code:
JasperReport jReport = JasperCompileManager.compileReport("Testreport.jrxml");
			
jReport.getDetail().getElementByKey("txt_vorname").setX(5);
jReport.getDetail().getElementByKey("txt_vorname").setWidth(100);
jReport.getDetail().getElementByKey("txt_vorname").setBackcolor(Color.LIGHT_GRAY);
jReport.getDetail().getElementByKey("txt_vorname").setMode(jr_e.MODE_OPAQUE);

i_left=jReport.getDetail().getElementByKey("txt_vorname").getX()+jReport.getDetail().getElementByKey("txt_vorname").getWidth();

jReport.getDetail().getElementByKey("txt_nachname").setX(i_left);
jReport.getDetail().getElementByKey("txt_nachname").setWidth(100);
jReport.getDetail().getElementByKey("txt_nachname").setBackcolor(Color.LIGHT_GRAY);
jReport.getDetail().getElementByKey("txt_nachname").setMode(jr_e.MODE_OPAQUE);
		
Class.forName( "com.mysql.jdbc.Driver" );
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/reports", "meinbenutzer", "meinpasswort" );

jPrint = JasperFillManager.fillReport(jReport, parameter, conn);		
jReport = JasperCompileManager.compileReport("Testreport.jrxml");

JasperViewer jv = new JasperViewer(jPrint);
getContentPane().add(jv.getContentPane(), BorderLayout.CENTER);
setVisible(true);

Also ich habe in dem vorbereiteten Report(jrxml-File) ein paar Linien und 2 Textfelder die Textfelder kann ich auch Formatieren(x setzen, Backcolor und ein paar andere Sachen) aber wenn ich dann das ganze an den JasperFillManager übergebe, füllt er mir ja erst den Report mit allen Daten.
Jetzt sind aus der einen Reihe mit den 2 Feldern ja 10 Reihen mit zwei Feldern geworden, die sind nun alle so wie ich es oben angegeben habe aber ich habe es noch nicht geschafft nach dem füllen des Report die Felder anders zu formatieren.

Ich müsste also nach dem ich den Report gefüllt habe noch mal auf die Textfelder zugreifen können um dann z.B. jede zweite Reihe anders zu färben, aber ich weiß noch nicht wie.
Mein nächster Versuch wäre gewesen, eine Neue jrxml aus dem laufenden Programm zu erstellen aber ich wollte nicht unbedingt bis auf diese Ebene runter gehen.
Ich dachte halt man füllt einen Report kann danach die Felder in einer Schleife durchlaufen und sie formatieren.

kannst du mir da nochmal weiterhelfen?

MfG Matthias
 
Es ist zwar schon einige Zeit her, dass ich mit Jasperreport umgegangen war, aber ich bilde mir ein, dass man statisch im Report Zeilen bezogen auf Bedingungen verschchwinden lassen kann.
Falls ich mich da recht entsinne und diese Möglichkeit existiert, würde ich für jede Zeile einen zähler mitgeben und den statischen Report so defineieren, entweder das eine oder das andere Zeilenformat (in diesem Fall mit der Farbe der Wahl) zu verwenden in abhängigkeit ob gerade oder ungerade Zahl.

Sorry, dass ich gerade kein Beispiel zur Hand habe, aber vielleicht wird man mit googeln da ja fündig.

Habe gerade mal nach der JasperReport HP gesucht und die FAQ gesehen.
schau mal unter Dynamic element formatting ...
vielleicht helfen Dir die Schlagwörter bei deiner weiteren Suche.

Grüße und gutes Gelingen

Takidoso
 
Zuletzt bearbeitet:
Also kann man doch in einem kompilierten Report die Formatierung ändern? Geil :D

Falls es sowas was takidoso erwähnt hat gibt würde ich es so machen und nicht mit den Subreports tricksen.
Hab sowas aber noch nie gemacht. Müsstest echt mal googlen.

Gruss
 
@takidoso
danke für die Antwort, aber könntest du da vielleicht doch mal ein Beispiel zu posten?

beim googeln zu dem Thema war ich nicht sehr erfolgreich :-(
 
Hast Du denn schonmal in den Link zu den JasperReports-FAQ's geschaut und bist mal den letzten Vorschlag dem <printWhenExpression> nachgegangen?
Leider habe ich gerade kein Beispiel z.Hand, da die Reports die ich vor ca 4-5 Jahren mal strickte bei mir irgendwo gut versteckt sind. Wenn ich mal wieder darüber stolpere werde ich Dir vielleicht mit einem Beispiel weiterhelfen können.
 
Nein ich hab noch nicht alles angeschaut, ich versuche gerade etwas mit dem DynamicReport.
Das Beispiel sah sehr viel versprechend aus.

Gruss Matthias
 
Da bin ich mal wieder und komme im Moment nicht so recht weiter.
Aber dafür gibt es ja ein Forum damit man Erfahrungen austauschen kann ;)

Ok ich habe es nun geschafft mir dynamisch einen Report mit Jasper zu erstellen und kann Textfelder usw. dynamisch erstellen, formatieren und füllen.
Jetzt komm ich aber an ein weiteres Problem, ich erstelle ein JRDesignBand für den Detailbereich des Reports, ich setze setSplitAllowed(true) damit er gesplittet werden kann.
Aber das Band splittet nicht, ich bekomm immer diese Fehlermeldung
The detail section, the page and column headers and footers and the margins do not fit the page height.
Wenn ich aber die Höhe der Seite anpasse funktioniert es aber ich bekomm eine Seite die so hoch ist wie 4 Seiten zusammen.
Wie kann ich es nun machen das er den Detailbereich auf mehrere Seiten aufteilt?

ich hoffe es kann mir jemand weiterhelfen.

Gruß Matthias
 
Hallo Leute,

ich nerv schon wieder ein wenig *fg*

Kann mir jemand sagen welche Eigenschaften vom JRBasePrintText oder JRPrintText dafür sorgen das der Text nicht immer nur in der ersten Zeile geschrieben wird?
Also ein mein Text ist z.B. dreimal so lang wie das JRBasePrintText die Höhe ist angepasst aber der Text wird nicht in 3 Zeilen unter einander geschrieben sondern übereinander.

Bitte erlöst mich von meinem Leiden ;-]:D:D

Gruß Matthias
 
Zurück