Wiele nowoczesnych generatorów raportów pozwala na osadzenie kolejnego raportu, tzw. podraportu. Dlaczego? Na przykład dla wygody projektowania raportu. Jeśli raport główny i raport podrzędny mają inny typ, łatwiej jest je utworzyć osobno.
Ponadto, dzieląc raport w ten sposób, można kontrolować strukturę raportu w zależności od warunków. Na przykład wyświetlasz podstawowe informacje w głównym raporcie, ale w zależności od tych danych lub niektórych parametrów w raporcie zostanie wybrany jeden z kilku podraportów. Dzięki temu raport jest bardziej uniwersalny. Nie ma potrzeby tworzenia wielu raportów przy różnych okazjach.
Użytkownik generatora raportów ActiveReports był zaskoczony właśnie tym problemem:
Odpowiedź pomocy technicznej:
Tak, pod pewnymi warunkami można wybrać SubReports z Parent Report. Na przykład można użyć właściwości Visible kontrolki Podreport w zdarzeniu Detail's Format Event, aby sterować widocznością subraportów na podstawie zmiennej licznika, która jest zwiększana przy każdym uruchomieniu Detail.OnFormat.
W Fastreport .NET podraport jest tworzony po prostu na innej stronie i ma dostęp do tych samych danych, co raport główny. Raport główny dodaje obiekt Subreport do lokalizacji, w której zamierzasz umieścić raport podrzędny. Ten obiekt jest łączem do strony raportu, która zostanie utworzona natychmiast. W ramach nowej raportu utworzysz żądany wzór.
Nawiasem mówiąc, można najpierw utworzyć raport z kilkoma stronami, a następnie, jeśli chcesz, można dodać obiekt podraportu i umieścić go w jego właściwościach jako łącze do żądanej strony.
Przyjrzyjmy się, jak zrobić raport z wyświetlaniem podraportu zgodnie z warunkami. W rzeczywistości pomysł jest prosty. Dzięki na skryptom zawartym w raporcie zapewnimy wgląd w wymagane raporty podrzędne. W takim przypadku raporty podrzędne powinny być umieszczane w tym samym miejscu, jeden obiekt nad drugim.
Załóżmy, że nasz raport zawiera informacje o zamówieniu. Istnieje również kilka raportów związanych z tabelą zamówień: szczegóły zamówienia, produkty, klienci. Oprócz informacji o zamówieniu chcemy wymienić produkty w zamówieniu lub informacje o kliencie. Raport zawiera parametr, na podstawie którego, wyświetlimy listę produktów lub informacje o kliencie.
Szablon głównego raportu jest dość prosty:
Podstawowe informacje o zamówieniu pochodzą z tabeli „Zamówienia”. Obok dodanych pól mamy obiekt Podraport. W podraport1 właściwości, zdecydowanie należy umieścić PrintOnParent właściwość true.
Po dodaniu obiektu raportu podrzędnego automatycznie dodano nową stronę raportu. Na tej stronie tworzymy szablon podraportu, który wyświetli listę produktów. Ponieważ tabela Zamówienia jest połączona z szczegółami zamówienia, w raporcie zostaną wyświetlone rekordy odpowiadające bieżącemu zamówieniu. Tabela „Szczegóły zamówienia” ma również połączenie z tabelą „Produkty”. I będziemy korzystać z danych z tego połączenia:
Dlatego linki do pól mają taki widok: Order Details. Products. ProductName.
Teraz dodajmy jeszcze jeden obiekt podraportu. Umieść go nad podraportem1. Należy również ustawić PrintOnParent właściwość na true.
W drugim szablonie podraportu dodajemy pole z tabeli „Klienci”, które ma połączenie z tabelą „Zamówienia”. Teraz mamy raport z dwoma podraportami. Dodaj parametr raportu. Parametr można ustawić z zewnątrz raportu, na przykład z programu użytkownika. Dla pasma danych w głównym raporcie utwórz zdarzenie obsługi BeforePrint:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
private void Data1_BeforePrint(object sender, EventArgs e) { if ((int)Report.GetParameterValue("Parameter") == 1) { Subreport1.Visible = false; Subreport2.Visible = true; } else { Subreport1.Visible = true; Subreport2.Visible = false; } } |
Kod jest prosty, więc w rzeczywistości podstawowe umiejętności programowania wystarczą, aby stworzyć taki rodzaj raportu.
W rezultacie lista produktów będzie wyglądać następująco:
A tabela informacji o kliencie będzie wyglądać tak: