Toon posts:

[Delphi / FastReport] Gegevens overbrengen naar report

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mijn programma bestaat uit een X aantal MDIChild form's. Op bijna al die form's staan non data-aware ListView's, waarin de data getoond wordt.

Nu heeft ieder scherm de mogelijkheid om zijn data af te drukken. De ListView's staan allemaal ingesteld om Multi row select. Wanneer de gebruiker op afdrukken klikt, krijgt die het print dialog scherm te zien, waar als afdrukbereik gekozen kan worden voor: Alles, Selectie, Pagina's.

Ik heb een apart form (wat nooit zichtbaar is), waarop alle fastreport componenten staan (1 component per form dus).

Nu is de vraag hoe ik het beste technisch gezien die informatie op dat rapport kan krijgen. Nu doe ik het zo (beetje smerige methode):

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure Tfrm_Reports.fstrp_ArtikelVerpakkingGetValue(const ParName: String; var ParValue: Variant);
begin
  if ParName = 'Afkorting' then
    ParValue := frm_ArtikelVerpakking.lstvw_Verpakkingen.Items[i].Caption;
  if ParName = 'Omschrijving' then
    ParValue := frm_ArtikelVerpakking.lstvw_Verpakkingen.Items[i].SubItems[0];
end;

procedure Tfrm_Reports.frUserDataset1CheckEOF(Sender: TObject; var Eof: Boolean);
begin
  if i <= frm_ArtikelVerpakking.lstvw_Verpakkingen.Items.Count - 1 then
    Eof := False
  else
    Eof := True;
end;

procedure Tfrm_Reports.frUserDataset1First(Sender: TObject);
begin
  i := 0;
end;

procedure Tfrm_Reports.frUserDataset1Next(Sender: TObject);
begin
  Inc(i);
end;


Deze methode is dan ook alleen nog voor de optie: alles afdrukken.


Maar is het niet beter op 1 of andere manier om met een functie door te geven aan zo'n MDIChild form wat voor informatie er afgedrukt moet worden (Alles, selectie). Vervolgens stopt die alle benodigde informatie in een soort object, waarna dit object terug gegeven wordt aan het frm_Reports scherm (waar dus al die report componenten opstaan).

Wie weet er hoe je dit het beste aan kan pakken?

(Hoe het nu gaat werkt het wel, maar is volgens mij absoluut geen goede methode).

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je kan zelf zo'n structuur/object bedenken om de items die in het rapport moeten in te stoppen of je gebruikt een MemTable die je dan ook nog eens simpel aan een rapport kan hangen. kbmMemTable of TClientDataSet zijn bijvoorbeeld TDataSet afgeleiden die je gewoon met de hand in het geheugen kan vullen.

Je kan je forms een interface (IInterface/IUknown enz) laten implementeren om op een generieke wijze die collectie op te vragen ipv elke keer specifiek aan het form te refereren (frm_ArtikelVerpakking). Je kan ook besluiten om al je (mdi)forms van een zelde basis form af te laten leiden en daar dan een functie maken die de collectie teruggeeft. Op die manier kan je alle forms generiek behandelen watbetreft het opvragen van de collectie die afgedrukt moet worden.

We adore chaos because we like to restore order - M.C. Escher