FastReport教程:如何在WinForms应用程序中从数据库邮件发送报表

翻译|使用教程|编辑:王香|2019-03-11 10:50:35.000|阅读 12 次

概述:报表是工作流程和电子报表(电子工作流程)不可或缺的一部分。分发电子报表的主要机制之一是电子邮件。也许,所有现代报表生成器都有一个内置的邮件客户端,可以直接从程序发送报表。

相关链接:

下载FastReport.Net最新版本

报表是工作流程和电子报表(电子工作流程)不可或缺的一部分。分发电子报表的主要机制之一是电子邮件。也许,所有现代报表生成器都有一个内置的邮件客户端,可以直接从程序发送报表。

FastReport.Net也不例外。您可以在预览模式下发送报表,也可以直接从用户应用程序的代码发送报表。如果您向单个收件人发送报表,这很方便。虽然可以添加多个收件人,但并不总是合适。例如,当您想要制作一个包含用户名称的简报时:“亲爱的,Ivan Ivanovich ......”。因此,我们考虑如何向多个收件人发送报表的示例,其地址和名称取自数据库。首先,在其中创建一个数据库和一个表。例如,以mdb格式访问数据库:

FastReport

创建一个WinForms应用程序。将电子邮件设置的两个按钮和文本字段添加到表单:

FastReport

第一个按钮将按名称发送报表,第二个按钮将报表发送到地址列表。您将从代码中了解其工作原理。 每个字段都有一个默认值; 如果您愿意,可以输入不同的值。

使用向导创建应用程序数据源:

FastReport

接下来,我们将连接字符串配置到数据库并选择表:

FastReport

将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正版授权,请点击“咨询在线客服”哟!



标签:报表.NET报表控件FastReport

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果

文章转载自: https://www.fast-report.com/en/blog/259/show/

登录慧都网发表评论登录


暂无评论...

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关厂商
相关产品
FastReport.Net

一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案。

在线客服 在线QQ 电话咨询
400-700-1020
在线客服系统
live chat