Wyłączanie databand w Rave Reports

0

Proszę o pomoc lub podpowiedź jak można w Rave Reports wyłączać databandy. Próbowałem korzystać z właściwośći visible w Rave w onbefore print takim kodem:

 
if (DataMemo1.Text='') then
DataBand1.visible:=false;
else
DataBand1.Visible:=true;
end;

Kod się kompiluje ale niestety nie bardzo to chce działać, pomiędzy kolejnymi databandami nadal tworzą się niepotrzebne odstępy.
Dane do komponentu datamemo przekazuję parametrem z programu i to działa.
Jak można się dostać do komponentów Rave z poziomu programu ?

Proszę o wyrozumiałość, w Rave'a dopiero raczkuję. pozdrawiam

0

Problem rozwiązany,co prawda ciężko coś znaleźć w tym temacie ale można to zrobić z poziomu programu w taki sposób:

if (RvProject1.projman.findravecomponent('NazwaRaportu.Strona', nil) as TRavePage) <> nil then
begin
         RapPage := (RvProject1.ProjMan.FindRaveComponent('NazwaRaportu.Strona',NIL) AS TRavePage);

         if (ROpis.Text='') then
         begin
            (RapPage.findcomponent('DataBand1') AS TRaveDataBand).Visible := False;
         end else
              begin
                RvProject1.SetParam('Opis',ROpis.Text);
              end; 
0

Niepotrzebnie dwa razy wyszukujesz - kod można uprościć:

RapPage := RvProject1.Projman.FindRaveComponent('NazwaRaportu.Strona', nil);

if RapPage <> nil then
  if ROpis.Text = '' then
    (RapPage.FindComponent('DataBand1') as TRaveDataBand).Visible := False
  else
    RvProject.SetParam('Opis', ROpis.Text);
0

Dzięki Furious, próbuję w podobny sposób wyłączyć zawartość całej strony i wszystko gra oprócz tego że chciałbym na raporcie tej pustej strony nie otrzymywać.
Korzystając z metody znalezionej w necie dostaję błąd invalid class typecast. Jak spowodować pokazywanie lub ukrywanie strony w raporcie, gdy jest ona pusta albo czy da się wyłączać poszczególne strony, visible powoduje ukrycie wszystkich komponentów a strona na wydruku pozostaje pusta.

with Sender as TBaseReport do begin
    RaveProject.ExecuteReport('Report1');
    NewPage;
    RaveProject.ExecuteReport('Report2');
    NewPage;
    RaveProject.ExecuteReport('Report3');
  end; { with } 
0

Błąd invalid class typecast dostajesz zapewne w linii:

with Sender as TBaseReport do begin

dlatego, że w danym momencie Sender wskazuje na obiekt z innej klasy, niż TBaseReport; Zanim jednak dokonasz rzutowania sprawdź czym jest Sender - np. w taki sposób:

if (Sender is TBaseReport) then
  with TBaseReport(Sender) do
  begin
    // tutaj instrukcje
  end;

w ten sposób jeśli Sender nie jest z klasy TBaseReport warunek (a tym samym kod) się po prostu nie wykona; Aby sprawdzić na jaką klasę wskazuje Sender wykorzystaj debager - wrzuć Sender.ClassName do okna Watches i postaw BreakPoint gdzieś w ciele zdarzenia i jeśli Sender jest z innej klasy to czas na zmiany w kodzie;

Co do tworzenia i obsługi raportów to niestety nic więcej nie jestem w stanie napisać, bo nigdy z nich po prostu nie korzystałem i nie znam się; Sporo informacji jest w sieci, więc odwiedź wuja Google i zapytaj go - może Ci coś podpowie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1