Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: Stringgrid im Quickrep darstellen

  Alt 28. Nov 2006, 07:56
Also ich habe lange nicht mit QReport gearbeitet, aber ein DBGrid kann das auch nicht so ohne Weiteres anzeigen, oder?
Soweit ich weiss, muss man doch ein Master-Band erstellen und für jedes Feld ein TQRDBText in das Band reinbepseln.

Meine Idee (mit Funktionsgarantie ): Dazu benötigst Du die Explode-Funktion (hier aus dem Forum), das eine CSV-Zeile in ein Array Of String überführt.
1. Verwende ein TStringsBand: In die Items-Eigenschaft kommt einfach die CSV-Datei.
1.a Im OnBeforePrint-Ereignis des TStringsBands rufst Du Explode auf und erzeugst so ein Array Of String mit den einzelnen Zellenwerten.
Delphi-Quellcode:
Procedure TForm1.QRStringsBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
Begin
// In QRStringsBand1 steht der aktuelle Datensatz im CSV-Format.
  Explode (QRStringsBand1.Item, MyFieldArray);
// Jetzt stehen im MyFieldArray die Zellenwerte der aktuellen Zeile.
End;
2. Für jede Spalte erzeugst Du zur Laufzeit eine TQRLabel-Komponente, die Position kannst Du anhand der String-Grid-Spaltenbreiten ausrechnen. In die Tag-Eigenschaft kommt die Spaltennummer.
2.a Im OnBeforePrint-Ereignis der TQRLabel-Komponenten schreibst Du:
Delphi-Quellcode:
 procedure TForm1.QRLabel2Print(sender: TObject; var Value: String);
Begin
 Value := MyExplodedFields[ TQRLabel(Sender).Tag] // .Tag ist ja die Spaltennummer
End;
Et voilá. Fertig ist der dynamische Stringgrid-Ausdruck-O-Mat.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat