Jak już wiesz, raporty FastReport.NET mogą posiadać formularze dialogowe, które są wyświetlane przed tworzeniem raportu. Pozwalają one na ustawienie pewnych zmiennych tekstowych, logicznych lub numerycznych. Mogą to być pola tekstowe, tabele, listy, listy rozwijane, daty, pola wyboru, a nawet listy z polami wyboru.
Z reguły formularze dialogowe są używane do filtrowania danych w raporcie lub do określania kryteriów zachowania raportu. Dzisiaj jednak porozmawiamy o innym użyciu formularza dialogowego.
Przeanalizujemy przypadek, w którym trzeba wprowadzić dane do raportu przed jego wyświetleniem. Jest to prosty przypadek, jeśli chodzi o pojedyncze pola tekstowe, pola wyboru, listy. Co jednak, jeśli masz tabelę danych, którą chcesz ręcznie dostosować przed sporządzeniem raportu?
W takiej sytuacji pomocny może być komponent Grid . Jest to tabela z danymi, które możemy wyświetlić na formularzu dialogowym przed utworzeniem raportu.
Dodajmy do raportu formularz dialogowy i umieśćmy w nim kontrolkę Grid. Następnie wywołajmy menu kontekstowe za pomocą kliknięcia prawym przyciskiem myszy:
Wybierz opcję "Edytuj kolumny...", aby dodać kolumny do tabeli.
W oknie edycji kolumny dodaj trzy kolumny - Nazwa, Adres, Telefon. Zwróć uwagę na właściwość Customers.Name. Odwołujemy się tutaj do źródła danych Customers, którego nie ma jeszcze w raporcie. Dodamy je jednak później za pomocą skryptu. Dla pozostałych kolumn należy ustawić odpowiednie właściwości.
Szablon strony raportu jest bardzo prosty - znajduje się na niej jeden obiekt Table z trzema kolumnami. Wypełnimy go w skrypcie raportu.
Dodajmy teraz funkcjonalność obsługi zdarzenia StartReport dla raportu:
Skrypt raportu:
public class ReportScript { // Struktura danych dla tabeli public class Customer { public string Name {get; set; } public string Address {get; set; } public string Phone {get; set; } public Customer(string name, string address, string phone) { Name = name; Address = address; Phone = phone; } } private void _StartReport(object sender, EventArgs e) { // Lista klientów List<Customer> customers = new List<Customer>(); // Wypełnij listę klientów danymi domyślnymi customers.Add(new Customer("Kevin Smith", "221 52nd st, Brooklyn, NY, United States", "+12127599755")); customers.Add(new Customer("Justin Ford", "1556 Broadway, suite 416, NY, United States", "+12145678900")); customers.Add(new Customer("Amanda Stephenson", "455 Larkspur Dr., CA, United States", "+14105175379")); // Rejestrowanie źródła danych w raporcie Report.RegisterData(customers, "Customers"); // Ustaw źródło danych w tabeli Grid1.DataSource = Report.GetDataSource("Customers"); // Ustaw pola w komórkach Cell6.Text = "[Customers.Name]"; Cell7.Text = "[Customers.Address]"; Cell8.Text = "[Customers.Phone]"; } }
W tym przypadku ustawiamy strukturę danych Customer, która będzie używana do wyświetlania wierszy tabeli w oknie dialogowym i w raporcie. Następnie tworzymy źródło danych Customers i wypełniamy je instancjami Customer. Następnie rejestrujemy otrzymane źródło danych w raporcie. Czy pamiętasz, jak ustawialiśmy pole danych dla kolumn w obiekcie Siatka? Odwołaliśmy się do tego źródła danych. Tutaj przypisujemy pola ze źródła do komórek tabeli (obiekt Table) w szablonie strony.
Teraz stwórzmy obsługę zdarzenia ManualBuild dla obiektu Tabela na stronie raportu. Zdarzenie to jest wywoływane po zbudowaniu obiektu na stronie i pozwala na zmianę tabeli, która jest gotowa do wyświetlenia. W ten sposób możemy zmienić tekst w tabeli za pomocą skryptu.
private void Table1_ManualBuild(object sender, EventArgs e) { // Ustaw źródło danych DataSourceBase rowData = Report.GetDataSource("Customers"); // Zainicjuj dane rowData.Init(); // Wyświetl pierwszy wiersz danych Table1.PrintRow(0); // Wyświetl kolumnę Table1.PrintColumns(); // Przeciągnij ścieżkę przez wszystkie wiersze danych w źródle while (rowData.HasMoreRows) { // Wyprowadź następny wiersz danych Table1.PrintRow(1); // Wyświetl kolumnę Table1.PrintColumns(); // pobierz następujący wpis ze źródła rowData.Next(); } }
W tym przypadku wypełniamy tabelę, przechodząc po prostu przez wszystkie wiersze danych.
Teraz uruchamiamy raport. Pierwszą rzeczą, jaką zobaczymy, będzie okno dialogowe z tabelą:
Kliknij podwójnie pierwszą komórkę, aby edytować jej tekst:
Kliknij przycisk OK i sprawdź wynik:
Jak widać, nasze domyślne dane zmieniły się na te, które wprowadziliśmy ręcznie. W ten sposób można dać użytkownikom możliwość manualnej zmiany danych przed utworzeniem raportu. W tym przykładzie pokazano, jak wypełnić tabelę danymi ze skryptu, ale nic nie stoi na przeszkodzie, aby wypełnić ją danymi ze źródła.