什么是並排報表呢?
按照我個人理解:並排報表是把兩張或者兩張以上的報表,放在一個報表頁面。
注:為了方便,本示例使用同一個數據源,但是您可以使用相同的方法,而在一個報表文檔中顯示兩個完全不同的 (使用不同數據源的) 報表。
依照慣例,我們先來看看我們最后實現的效果,如圖:
第一步:窗體布局。
新建一個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 }