Przypomnijmy sobie dość powszechną sytuację, kiedy trzeba zrobić coś bardzo szybko i przy użyciu tego, co jest dostępne. Nie zapominajmy jednak, że struktura i zawartość raportu zależy od czynników zewnętrznych. Generator raportów FastReport.NET jest bardzo elastycznym produktem i daje Ci dwa sposoby rozwiązania tego problemu.
Metoda 1. Aby utworzyć strukturę raportu w kodzie aplikacji niestandardowej.
Sposób 2. Aby kontrolować zachowanie raportu wewnątrz, używając skryptu.
Istnieje sporo informacji o tym, jak zaimplementować pewne cechy zachowania w skrypcie raportu. Jednak niewiele przykładów pokazuje, jak stworzyć raport z kodu. W tym artykule utworzymy raport z tabelą z kodu aplikacji, a także przyjrzymy się, jak wypełnić tabelę danymi i umieścić obiekt w komórce tabeli. Metoda 2 zostanie opisana bardziej szczegółowo w innym artykule.
Obiekt Table możemy wypełnić danymi statycznymi lub dynamicznymi. W pierwszym przypadku znamy konkretne wymiary tabeli i od razu wprowadzamy dane do komórek z ustalonego zestawu.
W drugim przypadku tabela jest tworzona dynamicznie, wiersze (kolumny) są dodawane w zależności od danych w źródle. Można jednak również ograniczyć rozmiar tabeli i ją naprawić.
Stwórzmy aplikację WinForms. Do linków dołączmy bibliotekę FastReport.dll, którą znajdziemy w folderze z zainstalowanym generatorem raportów. Dodajmy do formularza przycisk, który będzie uruchamiał budowanie raportu.Nie zapomnij stworzyć dla niego handler'a kliknięć.
Po pierwsze, dołączamy biblioteki FastReport.
using FastReport; using FastReport.Data; using FastReport.Table; using FastReport.Utils; private void button1_Click(object sender, EventArgs e) { using (Report report = new Report()) // Tworzenie obiektu raportu { ReportPage page = new ReportPage(); // Utworzenie obiektu strony raportu page.Name = "Page1"; //Set the name of the page report.Pages.Add(page); // Dodaj stronę do kolekcji stron raportu DataSet ds = new DataSet(); // Utwórz źródło danych ds.ReadXml("~/../../../App_Data/nwind.xml"); //Load the xml database into it report.RegisterData(ds); // Zarejestruj źródła danych w raporcie report.GetDataSource("Products").Enabled = true; // Uaktywnij źródło danych DataBand dataBand = new DataBand(); // Utwórz pasmo danych dataBand.Name = "DataBand"; // Sprecyzuj nazwę zespołu page.Bands.Add(dataBand); // Dodaj zespół do kolekcji zespołów na stronie TableObject table = new TableObject(); // Utwórz obiekt tabeli table.Name = "Table1"; // Określ nazwę obiektu table.RowCount = 10; // Określa liczbę wierszy table.ColumnCount = 2; // Określ liczbę kolumn // Wypełnij wszystkie komórki danymi w pętli for (int i = 0; i < 10; i++) for (int j = 0; j < 2; j++) { table[j, i].Text = (10 * i + j + 1).ToString(); table[j, i].Border.Lines = BorderLines.All; } dataBand.Objects.Add(table); //dataBand.Objects.Add(picture); if (report.Prepare()) report.ShowPrepared(); }
Przyjrzyjmy się teraz przykładowi, w którym musimy wypełnić tabelę danymi ze źródła. Zamieńmy powyższą pętlę na inny kod:
table.Columns[0]. AutoSize = true; //table.Columns[1]. AutoSize = true; DataSourceBase data = report.GetDataSource("Products"); data.Init(); //Zainicjalizujmy źródło danych data.First(); /Zdobędziemy pierwszy rekord for (int i = 0; i < 10; i++) { table[0, i].Text = data["ProductName"]. ToString(); table[0, i]. Border.Lines = BorderLines.All; //Zmieńmy granice table[1, i].Text = data["UnitPrice"]. ToString(); table[1, i]. Border.Lines = BorderLines.All; data.Next(); }
Na koniec otrzymamy tabelę z danymi z bazy danych:
Tabela wygląda niekompletnie bez tytułu. Dodajmy go:
table.RowCount = 11; … table[0, 0].Text ="Product Name"; table[0, 0].Border.Lines = BorderLines.All; table[1, 0].Text = "Unit Price"; table[1, 0].Border.Lines = BorderLines.All; for (int i = 1; i < 10; i++) { table[0, i].Text = data["ProductName"].ToString(); table[0, i].Border.Lines = BorderLines.All; table[1, i].Text = data["UnitPrice"].ToString(); table[1, i].Border.Lines = BorderLines.All; data.Next(); }
Wyjaśnię, że tytuły podaliśmy w pierwszym wierszu tabeli, co oznacza, że cykl rozpoczyna się nie od pierwszego, a od drugiego elementu.
Przyjrzyjmy się ostatniemu przypadkowi na dziś - jak umieścić obiekt w komórce tabeli. Na przykład obrazek:
PictureObject picture = new PictureObject(); //Utwórz obiekt obrazkowy picture.Bounds = new RectangleF(40, 0, Units.Centimeters * 0.5f, Units.Centimeters * 0.5f); // Ustaw rozmiar obiektu picture.CreateUniqueName(); //Ustaw dowolną nazwę picture.Image = Image.FromFile("C:/Users/FR/Downloads/28.png"); //Podaj ścieżkę dostępu do obrazu obraz.LoadImage(); //Wczytaj obraz picture.Parent = table[1, 1]; //Określenie obiektu nadrzędnego dla obrazu
Jest to właściwość Parent, która wpływa na sposób, w jaki obrazek będzie wyświetlany w komórce. Zobaczmy, jak to będzie wyglądało:
W ten sposób poznaliśmy sposób tworzenia tabeli w raporcie z poziomu kodu aplikacji oraz dwa sposoby wypełniania jej statycznymi lub dynamicznymi danymi. Teraz już wiesz, jak programowo dodać obiekt do komórki tabeli.