如何在報(bào)表預(yù)覽中制作自定義工具欄
大多數(shù)報(bào)表生成器都有一個(gè)帶有工具欄的報(bào)表查看模式,您可以從中對(duì)報(bào)表進(jìn)行各種操作。例如,翻頁(yè)、打印、導(dǎo)出等。但是,有時(shí)沒(méi)有足夠的按鈕具有您想要的功能。這可以是快速導(dǎo)出為某種格式,也可以是將報(bào)表發(fā)送給審閱,或者您可能想批量發(fā)送報(bào)表。無(wú)論哪種方式,標(biāo)準(zhǔn)工具欄FastReport.Net都不允許您添加自定義功能。但是開(kāi)發(fā)人員提供了創(chuàng)建自己的預(yù)覽模式的可能性。很棒,并不是每個(gè)人都喜歡標(biāo)準(zhǔn)的預(yù)覽版。許多人希望刪除一些不必要的按鈕,但會(huì)添加自己的“features”功能。因此,讓我們看一下如何快速輕松地制作報(bào)表預(yù)覽。在FastReport.dll庫(kù)中,我們可以使用標(biāo)準(zhǔn)預(yù)覽模式下的所有功能。
讓我們看一下這個(gè)例子。典型的Windows窗體應(yīng)用程序。我們正在將FastReport.dll庫(kù)連接到它。在表單上,我們添加了工具欄組件ToolStrip和PreviewControl——一個(gè)標(biāo)準(zhǔn)的報(bào)表查看器。該組件已經(jīng)擁有自己的工具欄,但是很容易隱藏在工具欄屬性中。
在工具欄上,我們創(chuàng)建了具有必要功能的按鈕:
打開(kāi)報(bào)表、打印、導(dǎo)出、翻頁(yè)和具有其功能的特殊按鈕。它將以csv格式將報(bào)表保存在指定的文件夾中。這樣的QuickSave。假設(shè)我們經(jīng)常使用此特定功能,因此我們將其移至單獨(dú)的按鈕?,F(xiàn)在讓我們看一下應(yīng)用程序代碼:
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(); } } }
下載報(bào)表按鈕將打開(kāi)一個(gè)標(biāo)準(zhǔn)的“File Open”文件打開(kāi)對(duì)話框窗口。然后,我們將數(shù)據(jù)庫(kù)上傳到數(shù)據(jù)源,在報(bào)表對(duì)象中上傳選定的報(bào)表模板,將其注冊(cè)為數(shù)據(jù)源,以在組件預(yù)覽中收集并顯示報(bào)表。
private void SaveBtn_Click(object sender, EventArgs e) { SaveBtn.DropDownItems.Clear(); Listlist = new List(); 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); } } }
導(dǎo)出/保存按鈕實(shí)際上有一個(gè)帶有各種導(dǎo)出格式的下拉列表。首先,我清除下拉列表,并創(chuàng)建要導(dǎo)出的對(duì)象列表。加載所有已注冊(cè)對(duì)象的列表。
然后,我將第一個(gè)元素添加到導(dǎo)出列表中——導(dǎo)出本機(jī)格式,即fpx格式。所有其他可用格式將循環(huán)添加到列表中。一些導(dǎo)出有圖片。列表中的每個(gè)元素都分配給處理按下項(xiàng)目的item_Click事件。
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); } }
事件處理程序item_Click正在導(dǎo)出報(bào)表,該報(bào)表當(dāng)前顯示在“Preview”預(yù)覽組件中。
private void PrintBtn_Click(object sender, EventArgs e) { previewControl1.Print(); }
“Print”打印按鈕將打開(kāi)“ PrintDoc”對(duì)話框窗口。
private void FirstBtn_Click(object sender, EventArgs e) { previewControl1.First(); }
“First”按鈕顯示報(bào)表的第一頁(yè)。
private void PrevBtn_Click(object sender, EventArgs e) { previewControl1.Prior(); }
“Prev”按鈕顯示報(bào)表的上一頁(yè)。
private void NextBtn_Click(object sender, EventArgs e) { previewControl1.Next(); }
“Next”按鈕顯示報(bào)表的下一頁(yè)。
private void LastBtn_Click(object sender, EventArgs e) { previewControl1.Last(); }
最后,“Last”按鈕顯示報(bào)表的最后一頁(yè)。
private void PageNo_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Enter) { previewControl1.PageNo = int.Parse(PageNo.Text); } }
按鈕之間的文本字段顯示當(dāng)前頁(yè)面的編號(hào)。更改此值可以在報(bào)表頁(yè)面之間切換。
private void PreviewControl1_PageChanged(object sender, EventArgs e) { PageNo.Text = previewControl1.PageNo.ToString(); }
但是,如果使用按鈕在頁(yè)面之間切換,則文本字段中的頁(yè)面編號(hào)也會(huì)更改。根據(jù)預(yù)覽組件中的頁(yè)面更改事件。
private void QuickSaveCSVBtn_Click(object sender, EventArgs e) { FastReport.Export.Csv.CSVExport ex = new FastReport.Export.Csv.CSVExport(); FReport.Export(ex, "Text.csv"); }
最后,我們的自定義按鈕。它的功能無(wú)處不在,僅用于演示。它以csv格式保存報(bào)表。因此,您可以為自己或客戶創(chuàng)建方便的報(bào)表查看器,并為其提供必要的功能。
預(yù)覽版中附加功能的夢(mèng)想可能是無(wú)限的,開(kāi)發(fā)人員為我們提供了這一機(jī)會(huì)。
而且,如果您希望在顯示來(lái)自應(yīng)用程序代碼的報(bào)表時(shí)使用預(yù)覽組件,我們將使用以下代碼:
CusomPreviewForm prev = new CusomPreviewForm (); Report report = new Report(); report.Load("K:/My documents/lines.frx"); report.Preview = prev.previewControl1; report.Show(); prev.ShowDialog();
在這里,我們覆蓋了報(bào)表的視圖組件。說(shuō)實(shí)話,我們必須公開(kāi)PreviewControl1。
就這樣。希望您能利用這個(gè)巨大的機(jī)會(huì)來(lái)制作自定義查看器報(bào)表。
產(chǎn)品介紹 | 下載試用 | 優(yōu)惠活動(dòng) | 在線客服