FastReport教程:如何在WinForms應(yīng)用程序中從數(shù)據(jù)庫郵件發(fā)送報表
報表是工作流程和電子報表(電子工作流程)不可或缺的一部分。分發(fā)電子報表的主要機制之一是電子郵件。也許,所有現(xiàn)代報表生成器都有一個內(nèi)置的郵件客戶端,可以直接從程序發(fā)送報表。
FastReport.Net也不例外。您可以在預覽模式下發(fā)送報表,也可以直接從用戶應(yīng)用程序的代碼發(fā)送報表。如果您向單個收件人發(fā)送報表,這很方便。雖然可以添加多個收件人,但并不總是合適。例如,當您想要制作一個包含用戶名稱的簡報時:“親愛的,Ivan Ivanovich ......”。因此,我們考慮如何向多個收件人發(fā)送報表的示例,其地址和名稱取自數(shù)據(jù)庫。首先,在其中創(chuàng)建一個數(shù)據(jù)庫和一個表。例如,以mdb格式訪問數(shù)據(jù)庫:
創(chuàng)建一個WinForms應(yīng)用程序。將電子郵件設(shè)置的兩個按鈕和文本字段添加到表單:
第一個按鈕將按名稱發(fā)送報表,第二個按鈕將報表發(fā)送到地址列表。您將從代碼中了解其工作原理。 每個字段都有一個默認值; 如果您愿意,可以輸入不同的值。
使用向?qū)?chuàng)建應(yīng)用程序數(shù)據(jù)源:
接下來,我們將連接字符串配置到數(shù)據(jù)庫并選擇表:
將FastReport庫的鏈接添加到項目中。我們還需要一個包含報告模板的文件,我們將發(fā)送該文件。將其添加到項目中。例如,我們將使用Demo文件夾中的報告text.frx。
現(xiàn)在為Direct email按鈕事件創(chuàng)建一個處理程序:
using System; using System.Data; using System.Windows.Forms; using FastReport; using FastReport.Utils; using FastReport.Export.Pdf; using FastReport.Export.Email; private void SendReport_Click(object sender, EventArgs e) { Config.ReportSettings.ShowProgress = false; //Disable progress window Report report1 = new Report(); //Create new report object report1.Load(Environment.CurrentDirectory + "/text.frx"); //Load report report1.Prepare(); //Prepare report PDFExport pdf = new PDFExport(); //Cteate PDF export EmailExport email = new EmailExport(); //Create Email export EmailsDataSet ds = new EmailsDataSet(); EmailsDataSetTableAdapters.CustomerTableAdapter adapter = new EmailsDataSetTableAdapters.CustomerTableAdapter(); adapter.Fill(ds.Customer); DataTable table = ds.Customer; foreach (DataRow row in table.Rows) { SendMessage(report1, pdf, email, row["Email"].ToString(), row["Name"].ToString()); } }
這里我們首先創(chuàng)建報表對象,將模板加載到其中,創(chuàng)建導出到PDF和電子郵件。該報告將附在PDF格式的信件中。
接下來,我們創(chuàng)建一個數(shù)據(jù)源,用數(shù)據(jù)填充表。我們查看表格條目,并為每個條目發(fā)送一封信。當然,如果你有一個龐大的郵件列表,這種方法會很慢。但是你可以在信件的文本中插入客戶的名字。
正如您所注意到的,我們已經(jīng)將這封信發(fā)送到一個單獨的方法 - SendMessage:
public void SendMessage(Report report, PDFExport pdf, EmailExport email, string recipient, string custName) { email.Account.Address = AddressFromTxt.Text; email.Account.Name = SenderNameTxt.Text; email.Account.Host = HostTxt.Text; email.Account.Port = Convert.ToInt16(PortTxt.Text); email.Account.UserName = UserNameTxt.Text; email.Account.Password = PasswordTxt.Text; email.Account.MessageTemplate = "Test"; email.Account.EnableSSL = true; email.Address = recipient; email.Subject = MailSubjectTxt.Text; email.MessageBody = custName is null? MessageTxt.Text : string.Format("Dear, {0}! {1}", custName, MessageTxt.Text); email.Export = pdf; //Set export type email.SendEmail(report); //Send email }
對于Send to all按鈕,讓我們創(chuàng)建一個OnClick事件處理程序:
private void Send_to_all_Click(object sender, EventArgs e) { Config.ReportSettings.ShowProgress PDFExport(); //Cteate PDF export EmailExport email = new EmailExport(); //Create Email export = ds.Customer; foreach (DataRow row in table.Rows) { if (emails == "") emails ; MessageBox.Show(emails); }
與前面的代碼不同,在循環(huán)中我們添加地址以發(fā)送給變量,然后將其傳遞給消息發(fā)送方法。此方法比前一個方法工作得快得多,特別是如果郵件列表很大。為自己判斷,在這里你發(fā)一封信,而不是一套。
因此,發(fā)送報表的任務(wù)減少為導出到電子郵件并從數(shù)據(jù)庫向每個地址發(fā)送一封信。
購買FastReport.Net正版授權(quán),請點擊“咨詢在線客服”喲!