Devexpress Xtrareport 并排报表

什么是并排报表呢?

  

按照我个人理解:并排报表是把两张或者两张以上的报表,放在一个报表页面。

注:为了方便,本示例使用同一个数据源,但是您可以使用相同的方法,而在一个报表文档中显示两个完全不同的 (使用不同数据源的) 报表。

依照惯例,我们先来看看我们最后实现的效果,如图:

  

第一步:窗体布局。

新建一个WinForm窗体,,拉入第三方控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,无非就是设置空间Dock属性,还有字体Text属性等,简单布局我就不多阐述了。可以参考系列第一篇。

第二步:创建两个个Devexpress XtraReport报表文件。一个是明细报表DetailSideBySideRpt(用于绑定到最后显示的并排报表MasterSideBySideRpt),一个是最后显示的并排报表MasterSideBySideRpt  如图:

   

  然后新建一个MasterSideBySideRpt,如图:

    

那如何把我们新建的DetailSideBySideRpt报表,并排显示到MasterSideBySideRpt呢?

方法一:添加控件XrSubreport 如图:

  

也可以手动添加代码

this.xrSubreport1.ReportSource = new 创建并排报表.DetailSideBySideRpt();

this.xrSubreport2.ReportSource = new 创建并排报表.DetailSideBySideRpt();//这里我并排的两张报表都使用了同一个DetailSideBySideRpt,可以使用不同的

Form代码

  

 1       /// <summary>
 2         /// 获取数据集
 3         /// </summary>
 4         /// <returns>返回数据集</returns>
 5         private DataSet Getdataset()
 6         {
 7             DataSet ds = new DataSet();
 8             string cstr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString.ToString();
 9             SqlConnection mycon = new SqlConnection(cstr);
10             try
11             {
12                 mycon.Open();
13                 SqlCommand mycom = new SqlCommand("select * from jiaochainfo", mycon);
14                 SqlDataAdapter dpt = new SqlDataAdapter(mycom);
15                 dpt.Fill(ds, "jiaochainfo");
16                 mycon.Close();
17             }
18             catch (Exception ex)
19             {
20 
21                 MessageBox.Show(ex.Message);
22             }
23 
24             return ds;
25         }
26         //点击事件
27         private void simpleButton1_Click(object sender, EventArgs e)
28         {
29             DataSet ds = Getdataset();
30             XtraReport1 report = new XtraReport1(ds);
31             report.Landscape = true;
32             MianXtrareport rpt = new MianXtrareport(ds);
33             rpt.Landscape = true;
34             documentViewer1.DocumentSource = rpt;
35             //显示主报表的文档
36             rpt.CreateDocument();
37         }
38 
39     }

详细报表代码

  

 1       
 2         //构造数据参数绑定字段
 3         public XtraReport1(DataSet ds)
 4         {
 5             InitializeComponent();
 6             this.DataSource = ds;
 7             this.DataMember = "jiaochainfo";
 8             this.xrLabel1.DataBindings.Add("Text",ds,"name");
 9             this.xrLabel2.DataBindings.Add("Text",ds,"sex");
10             this.xrLabel3.DataBindings.Add("Text",ds,"older");
11         }

主报表代码

  

 1        //主报表构造函数
 2         public MianXtrareport( DataSet ds)
 3         {
 4             InitializeComponent();
 5             //关键的一步,xrsubreport 控件的报表源等于 xtrareport
 6             this.xrSubreport1.ReportSource = new 并排报表.XtraReport1(ds);
 7             this.xrSubreport2.ReportSource = new 并排报表.XtraReport1(ds);
 8 
 9         }
10 
11         //在显示之前的事件,利用FilterString属性过滤数据源
12 
13         private void xrSubreport1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
14         {
15             //jtype为数据库库的字段
16             ((XRSubreport)sender).ReportSource.FilterString = "jtype =='体育明星'";
17         }
18         //利用FilterString属性过滤数据源
19 
20         private void xrSubreport2_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
21         {
22             ((XRSubreport)sender).ReportSource.FilterString = "jtype =='影视明星'";
23         }
原文地址:https://www.cnblogs.com/xiaowie/p/8990562.html