FastReport教程:如何在WinForms应用程序中从数据库邮件发送报表
报表是工作流程和电子报表(电子工作流程)不可或缺的一部分。分发电子报表的主要机制之一是电子邮件。也许,所有现代报表生成器都有一个内置的邮件客户端,可以直接从程序发送报表。
FastReport.Net也不例外。您可以在预览模式下发送报表,也可以直接从用户应用程序的代码发送报表。如果您向单个收件人发送报表,这很方便。虽然可以添加多个收件人,但并不总是合适。例如,当您想要制作一个包含用户名称的简报时:“亲爱的,Ivan Ivanovich ......”。因此,我们考虑如何向多个收件人发送报表的示例,其地址和名称取自数据库。首先,在其中创建一个数据库和一个表。例如,以mdb格式访问数据库:
创建一个WinForms应用程序。将电子邮件设置的两个按钮和文本字段添加到表单:
第一个按钮将按名称发送报表,第二个按钮将报表发送到地址列表。您将从代码中了解其工作原理。 每个字段都有一个默认值; 如果您愿意,可以输入不同的值。
使用向导创建应用程序数据源:
接下来,我们将连接字符串配置到数据库并选择表:
将FastReport库的链接添加到项目中。我们还需要一个包含报告模板的文件,我们将发送该文件。将其添加到项目中。例如,我们将使用Demo文件夹中的报告text.frx。
现在为Direct email按钮事件创建一个处理程序:
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()); } }
这里我们首先创建报表对象,将模板加载到其中,创建导出到PDF和电子邮件。该报告将附在PDF格式的信件中。
接下来,我们创建一个数据源,用数据填充表。我们查看表格条目,并为每个条目发送一封信。当然,如果你有一个庞大的邮件列表,这种方法会很慢。但是你可以在信件的文本中插入客户的名字。
正如您所注意到的,我们已经将这封信发送到一个单独的方法 - 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按钮,让我们创建一个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); }
与前面的代码不同,在循环中我们添加地址以发送给变量,然后将其传递给消息发送方法。此方法比前一个方法工作得快得多,特别是如果邮件列表很大。为自己判断,在这里你发一封信,而不是一套。
因此,发送报表的任务减少为导出到电子邮件并从数据库向每个地址发送一封信。
购买FastReport.Net正版授权,请点击“”哟!