lhmlyx2723356 发表于 2013-9-4 13:06:31

[原创]Devexpress XtraReports 系列 9 创建邮件合并报表

本帖最后由 lhmlyx2723356 于 2013-9-3 22:37 编辑

昨天发表了Devexpress XtraReports系列第八篇[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表,今天我们继续。
今天的主题是创建邮件合并报表。
什么是邮件合并报表呢?
回答:数据字段被嵌入到标签控件的文本中,并在预览或导出报表时被替换为相应的数据取值。
邮件合并功能:一般报表,我们不能指定为单个属性指定一个以上的数据绑定,而“邮件合并”则允许把多个数据字段合并到文本中。
注意:字段需要用[]括起来
支持邮件合并的控件有:

[*]XRBarCode
[*]XRCheckBox
[*]XRLabel
[*]XRRichText
[*]XRTableCell
[*]XRZipCode
[*]
首先我们来看看最后实现的效果。Demo最后附上。


接下来开始讲解如何一步一步做出这个报表:
第一步,创建如上窗体,拉入控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,简单布局我就不多说了,跟上篇一样的布局 ,详见:http://www.dxper.net/thread-1042-1-1.html
第二步,创建一个报表文件。如图:


第三步,我们利用数据库做一张简单的表并输入一些测试值。如图:

第四步,数据库表,布局都做好了,接下来我们就来处理相对应的事件了。输入文本框的值,点击按钮把查询出来的数据源绑定到报表中
a,修改报表文件的构造函数,让它在实例化的时候可以接收数据源。
public MailMergeRpt(DataSet ds)
      {
          InitializeComponent();
          this.DataSource = ds;
          this.DataMember = "MailMegerRpt";
      }
//为了让XRRichText控件中承载的XRPictureBox控件显示出数据库中测试数据中的jpg图片,其实这些图片是存放在程序运行目录下,如图:


那如何让图片显示出来呢?
我们应该处理XRPictureBox控件的BeforePrint 事件。
private void xrPictureBox1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
   {
       string path = System.Environment.CurrentDirectory + "\\" + GetCurrentColumnValue("pictureurl");
       xrPictureBox1.Sizing = DevExpress.XtraPrinting.ImageSizeMode.ZoomImage;
       ((XRPictureBox)sender).Image = Image.FromFile(path);
   }
b,获取数据源
private DataSet BindRpt()
      {
          DataSet ds = new DataSet();
          try
          {
            SqlConnection con = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=ReportDeom");
            SqlDataAdapter adapter;
            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM Dept where dept_name=@name OR @name='' ", con);
            SqlParameter[] paras = new SqlParameter[]{
                  new SqlParameter("@name",txtName.Text.Trim())
            };
            cmd.Parameters.AddRange(paras);
            adapter = new SqlDataAdapter(cmd);
            adapter.Fill(ds, "MailMegerRpt"); ;
            con.Close();
          }
          catch (Exception ex)
          {
            throw ex;
          }
          return ds;
      }

c,单击按钮,绑定数据到报表中
private void btnShowReport_Click(object sender, EventArgs e)
{
   DataSet ds = BindRpt();
   MailMergeRpt Rpt = new MailMergeRpt(ds);
   this.documentViewer1.DocumentSource = Rpt;
   Rpt.CreateDocument();
}

到此,邮件合并报表就完成了。希望对大家有点帮助。又到了送福利时间,哈哈。。屌丝们。。。雄起吧。。。
别忘了点赞呀。。。嘿嘿。。您的赞是我最大的动力。。。http://www.dxper.net/data/attachment/forum/201308/30/094228vb2pz8jf3smyjw42.png
最后附上Demo地址: http://yunpan.cn/QXIpty8CBHdr5访问密码 56c9



daijinhui 发表于 2013-10-24 12:40:21

感谢感谢。。
页: [1]
查看完整版本: [原创]Devexpress XtraReports 系列 9 创建邮件合并报表