什么是并排报表呢?
按照我个人理解:并排报表是把两张或者两张以上的报表,放在一个报表页面。
注:为了方便,本示例使用同一个数据源,但是您可以使用相同的方法,而在一个报表文档中显示两个完全不同的 (使用不同数据源的) 报表。
依照惯例,我们先来看看我们最后实现的效果,如图:
第一步:窗体布局。
新建一个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 }