如何在报表预览中制作自定义工具栏
大多数报表生成器都有一个带有工具栏的报表查看模式,您可以从中对报表进行各种操作。例如,翻页、打印、导出等。但是,有时没有足够的按钮具有您想要的功能。这可以是快速导出为某种格式,也可以是将报表发送给审阅,或者您可能想批量发送报表。无论哪种方式,标准工具栏FastReport.Net都不允许您添加自定义功能。但是开发人员提供了创建自己的预览模式的可能性。很棒,并不是每个人都喜欢标准的预览版。许多人希望删除一些不必要的按钮,但会添加自己的“features”功能。因此,让我们看一下如何快速轻松地制作报表预览。在FastReport.dll库中,我们可以使用标准预览模式下的所有功能。
让我们看一下这个例子。典型的Windows窗体应用程序。我们正在将FastReport.dll库连接到它。在表单上,我们添加了工具栏组件ToolStrip和PreviewControl——一个标准的报表查看器。该组件已经拥有自己的工具栏,但是很容易隐藏在工具栏属性中。
在工具栏上,我们创建了具有必要功能的按钮:
打开报表、打印、导出、翻页和具有其功能的特殊按钮。它将以csv格式将报表保存在指定的文件夹中。这样的QuickSave。假设我们经常使用此特定功能,因此我们将其移至单独的按钮。现在让我们看一下应用程序代码:
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(); } } }
下载报表按钮将打开一个标准的“File Open”文件打开对话框窗口。然后,我们将数据库上传到数据源,在报表对象中上传选定的报表模板,将其注册为数据源,以在组件预览中收集并显示报表。
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); } } }
导出/保存按钮实际上有一个带有各种导出格式的下拉列表。首先,我清除下拉列表,并创建要导出的对象列表。加载所有已注册对象的列表。
然后,我将第一个元素添加到导出列表中——导出本机格式,即fpx格式。所有其他可用格式将循环添加到列表中。一些导出有图片。列表中的每个元素都分配给处理按下项目的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正在导出报表,该报表当前显示在“Preview”预览组件中。
private void PrintBtn_Click(object sender, EventArgs e) { previewControl1.Print(); }
“Print”打印按钮将打开“ PrintDoc”对话框窗口。
private void FirstBtn_Click(object sender, EventArgs e) { previewControl1.First(); }
“First”按钮显示报表的第一页。
private void PrevBtn_Click(object sender, EventArgs e) { previewControl1.Prior(); }
“Prev”按钮显示报表的上一页。
private void NextBtn_Click(object sender, EventArgs e) { previewControl1.Next(); }
“Next”按钮显示报表的下一页。
private void LastBtn_Click(object sender, EventArgs e) { previewControl1.Last(); }
最后,“Last”按钮显示报表的最后一页。
private void PageNo_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Enter) { previewControl1.PageNo = int.Parse(PageNo.Text); } }
按钮之间的文本字段显示当前页面的编号。更改此值可以在报表页面之间切换。
private void PreviewControl1_PageChanged(object sender, EventArgs e) { PageNo.Text = previewControl1.PageNo.ToString(); }
但是,如果使用按钮在页面之间切换,则文本字段中的页面编号也会更改。根据预览组件中的页面更改事件。
private void QuickSaveCSVBtn_Click(object sender, EventArgs e) { FastReport.Export.Csv.CSVExport ex = new FastReport.Export.Csv.CSVExport(); FReport.Export(ex, "Text.csv"); }
最后,我们的自定义按钮。它的功能无处不在,仅用于演示。它以csv格式保存报表。因此,您可以为自己或客户创建方便的报表查看器,并为其提供必要的功能。
预览版中附加功能的梦想可能是无限的,开发人员为我们提供了这一机会。
而且,如果您希望在显示来自应用程序代码的报表时使用预览组件,我们将使用以下代码:
CusomPreviewForm prev = new CusomPreviewForm (); Report report = new Report(); report.Load("K:/My documents/lines.frx"); report.Preview = prev.previewControl1; report.Show(); prev.ShowDialog();
在这里,我们覆盖了报表的视图组件。说实话,我们必须公开PreviewControl1。
就这样。希望您能利用这个巨大的机会来制作自定义查看器报表。