Większość generatorów raportów ma tryb przeglądania raportów z paskiem narzędzi, za pomocą którego, można dokonywać różnych manipulacji z raportem. Na przykład przeglądanie stron, drukowanie, eksportowanie i inne. Jednak czasami brakuje przycisków z odpowiednią funkcjonalnością. Może to być szybki eksport do jakiegoś formatu lub wysłanie raportu do recenzji lub wykonać masową wysyłkę raportu. Tak czy inaczej, standardowy pasek narzędzi FastReport.Net nie pozwala na dodawanie elementów niestandardowych. Ale informatycy przewidzieli to i dodali możliwość stworzenia własnego trybu podglądu. I to jest świetne, ponieważ nie każdemu pasuje standardowy podgląd. Wielu chciałoby usunąć kilka niepotrzebnych przycisków i zastąpić je własnymi. Dla tego przyjrzyjmy się, jak szybko i łatwo można dokonać podglądu raportów. Wszystkie funkcje ze standardowego trybu podglądu są dostępne dla nas w bibliotece FastReport.dll.
Przyjrzyjmy się temu przykładowi. Typowa aplikacja Windows Forms. Łączymy z nią bibliotekę FastReport.dll. W formularzu dodajemy składnik paska narzędzi ToolStrip i PreviewControl - standardową przeglądarkę raportów. Ten składnik ma już swój własny pasek narzędzi, ale można go łatwo ukryć we właściwościach paska narzędzi.
Na pasku narzędzi utworzyliśmy przyciski z niezbędną funkcjonalnością:
Otwórz raport, wydrukuj, eksportuj, przewijaj strony i specjalny przycisk z określoną funkcjonalnością. Będzie przechowywać raport w formacie csv w określonym folderze. Taki QuickSave. Załóżmy, że często używamy tej konkretnej funkcji, więc przenieśliśmy ją do osobnego przycisku. Teraz spójrzmy na kod aplikacji:
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 26 27 28 |
public partial class Form1 : Form { private Report FReport; private DataSet FDataSet; public Form1() { InitializeComponent(); } private void LoadBtn_Click(object sender, EventArgs e) { FReport = new Report(); FReport.Preview = previewControl1; using (OpenFileDialog file = new OpenFileDialog()) { if (file.ShowDialog() == DialogResult.OK) { FDataSet = new DataSet(); FDataSet.ReadXml("K:/My documents/nwind.xml"); FReport.Load(file.FileName); FReport.RegisterData(FDataSet, "NorthWind"); FReport.Prepare(); FReport.ShowPrepared(); } } } |
Przycisk Pobierz raport otwiera standardowe okno dialogowe Otwieranie pliku. Następnie przekazujemy bazę danych do źródła danych, przekazujemy wybrany szablon raportu w obiekcie raportu, rejestrujemy jako źródło danych do zbierania i wyświetlania raportu w wersji zapoznawczej składnika.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
private void SaveBtn_Click(object sender, EventArgs e) { SaveBtn.DropDownItems.Clear(); List<ObjectInfo> list = new List<ObjectInfo>(); RegisteredObjects.Objects.EnumItems(list); ToolStripMenuItem saveNative = new ToolStripMenuItem("Save to .fpx file..."); saveNative.Click += new EventHandler(item_Click); SaveBtn.DropDownItems.Add(saveNative); foreach (ObjectInfo info in list) { if (info.Object != null && info.Object.IsSubclassOf(typeof(ExportBase))) { ToolStripMenuItem item = new ToolStripMenuItem(Res.TryGet(info.Text) + "..."); item.Tag = info; item.Click += new EventHandler(item_Click); if (info.ImageIndex != -1) item.Image = Res.GetImage(info.ImageIndex); SaveBtn.DropDownItems.Add(item); } } } |
Przycisk eksportuj/ zapisz ma listę rozwijaną z różnymi formatami eksportu. Najpierw należy wyczyścić listę rozwijaną i utworzyć listę obiektów do eksportu. Wczytuje listę wszystkich zarejestrowanych obiektów.
Następnie dodaję pierwszy element do listy eksportu - eksportuje format macierzysty, czyli format fpx. Wszystkie inne dostępne formaty są dodawane do listy w pętli. Niektóre mają obraz. Każdy element listy jest przypisany do zdarzenia item_Click, które obsługuje wybór elementu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
private void item_Click(object sender, EventArgs e) { ObjectInfo info = (sender as ToolStripMenuItem).Tag as ObjectInfo; if (info == null) { previewControl1.Save(); } else { ExportBase export = Activator.CreateInstance(info.Object) as ExportBase; export.CurPage = previewControl1.PageNo; export.Export(previewControl1.Report); } } |
Program obsługi zdarzeń item_Click eksportuje raport, który aktualnie wyświetlany w komponencie Preview.
1 2 3 4 |
private void PrintBtn_Click(object sender, EventArgs e) { previewControl1.Print(); } |
Przycisk Drukuj otwiera okno dialogowe PrintDoc.
1 2 3 4 |
private void FirstBtn_Click(object sender, EventArgs e) { previewControl1.First(); } |
Przycisk "First" pokazuje pierwszą stronę raportu.
1 2 3 4 |
private void PrevBtn_Click(object sender, EventArgs e) { previewControl1.Prior(); } |
Przycisk "Prev" pokazuje poprzednią stronę raportu.
1 2 3 4 |
private void NextBtn_Click(object sender, EventArgs e) { previewControl1.Next(); } |
Przycisk "Next" pokazuje następną stronę raportu.
1 2 3 4 |
private void LastBtn_Click(object sender, EventArgs e) { previewControl1.Last(); } |
I wreszcie przycisk "Last" pokazuje ostatnią stronę raportu.
1 2 3 4 5 6 7 |
private void PageNo_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Enter) { previewControl1.PageNo = int.Parse(PageNo.Text); } } |
Pole tekstowe między przyciskami pokazuje numer bieżącej strony. Zmieniając tę wartość można przełączać się między stronami raportu.
1 2 3 4 |
private void PreviewControl1_PageChanged(object sender, EventArgs e) { PageNo.Text = previewControl1.PageNo.ToString(); } |
Ale jeśli przełączasz się między stronami za pomocą przycisków, numer strony w polu tekstowym również się zmieni. Zgodnie ze zdarzeniem zmiany strony w komponencie Podgląd.
1 2 3 4 5 |
private void QuickSaveCSVBtn_Click(object sender, EventArgs e) { FastReport.Export.Csv.CSVExport ex = new FastReport.Export.Csv.CSVExport(); FReport.Export(ex, "Text.csv"); } |
Podsumowując - nasz niestandardowy przycisk. Jego funkcjonalność jest pobierana znikąd, tylko dla demonstracji. Zapisuje raport w formacie csv. W ten sposób można zrobić wygodną przeglądarkę raportów dla siebie lub klienta, zapewniając mu niezbędne funkcje.
Marzenie o dodatkowych funkcjach w Podglądzie może być nieskończona, najważniejsze, że twórcy dali nam tę możliwość. A jeśli chcesz używać składnika podglądu podczas wyświetlania raportów z kodu aplikacji, używamy następującego kodu:
W tym miejscu zastępujemy składnik widoku raportu. Mówiąc szczerze musieliśmy upublicznić podglądControl1.
To wszystko. Mam nadzieję, że skorzystasz z tej wspaniałej okazji, jak tworzyć niestandardowe raporty przeglądarek.