大多數報表生成器都有一個帶有工具欄的報表查看模式,您可以從中對報表進行各種操作。例如,翻頁、打印、導出等。但是,有時沒有足夠的按鈕具有您想要的功能。這可以是快速導出爲某種格式,也可以是將報表發送給審閱,或者您可能想批量發送報表。無論哪種方式,標準工具欄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();
在這裏,我們覆蓋了報表的視圖組件。
就這樣。希望您能利用這個特別好的機會來製作自定義查看器報表。