功能說明:生成一個報表文件DV1,保存到本地AA.rep,再重新加載這個文件到DV2
1.布局如下圖:
panel1 上有三個button
panel2上有個documentView dv1
panel3上有個dv2
panel2與panel3之間有一個splitter
代碼如下:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using DevComponents.DotNetBar; using System.Data.SqlClient; using DevExpress.XtraReports.UI; namespace 收銀test { public partial class frmCreateReport : DevComponents.DotNetBar.Metro.MetroForm { public frmCreateReport() { InitializeComponent(); button1.Click += Button1_Click; button2.Click += Button2_Click; button3.Click += Button3_Click; } // //加載報表 private void Button3_Click(object sender, EventArgs e) { XtraReport xr = new XtraReport(); xr.LoadLayout("AA.rep"); xr.DataSource = GetDateSet(); xr.CreateDocument(); dv2.DocumentSource = xr; } // //保存報表 private void Button2_Click(object sender, EventArgs e) { try { ((XtraReport)Dv1.DocumentSource).SaveLayout("AA.rep"); MessageBox.Show("保存成功"); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } // //生成報表 private void Button1_Click(object sender, EventArgs e) { /* 0.創建數據集 1.創建報表 2.創建容器 及 控件 */ DataSet ds = GetDateSet(); XtraReport xr = new XtraReport(); xr.DataSource = ds; iniXRComponent(xr); xr.CreateDocument(); Dv1.DocumentSource = xr; } // //創建容器及控件 private void iniXRComponent(XtraReport xr) { //添加 帶區 DetailBand detail = new DetailBand(); PageHeaderBand pageHeader = new PageHeaderBand(); ReportFooterBand reportFooter = new ReportFooterBand(); detail.HeightF = 20; reportFooter.HeightF = 380; pageHeader.HeightF = 20; xr.Bands.AddRange(new Band[] { detail, pageHeader, reportFooter }); //添加控件 InitDetailsBasedonXRTable(xr); } public void InitDetailsBasedonXRTable(XtraReport rpt) { DataSet ds = (DataSet)rpt.DataSource; int colCount = ds.Tables[0].Columns.Count;//列數 int colWidth = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right)) / colCount;//每列寬 //創建一個列表頭 XRTable tableHeader = new XRTable(); tableHeader.HeightF = 20; tableHeader.WidthF = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right)); XRTableRow headerRow = new XRTableRow(); headerRow.WidthF = tableHeader.WidthF; tableHeader.Rows.Add(headerRow); headerRow.BackColor = Color.Gray; headerRow.ForeColor = Color.White; //創建數據 XRTable tableDetail = new XRTable(); tableDetail.HeightF = 20; tableDetail.Width = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right)); XRTableRow detailRow = new XRTableRow(); detailRow.Width = tableDetail.Width; tableDetail.Rows.Add(detailRow); //tableDetail.EvenStyleName = "EvenStyle"; //tableDetail.OddStyleName = "OddStyle"; //加入cell表頭用列名填充 表身用數據填充 for (int i = 0; i < colCount; i++) { XRTableCell headerCell = new XRTableCell(); headerCell.WidthF = colWidth;//列寬 headerCell.Text = ds.Tables[0].Columns[i].Caption; XRTableCell detailCell = new XRTableCell(); detailCell.WidthF = colWidth; detailCell.DataBindings.Add("Text", null, ds.Tables[0].Columns[i].Caption); if (i == 0) { headerCell.Borders = DevExpress.XtraPrinting.BorderSide.All; detailCell.Borders = DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom; } else { headerCell.Borders = DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom; detailCell.Borders = DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom; } //填充到對應位置 headerRow.Cells.Add(headerCell); detailRow.Cells.Add(detailCell); } // 加到report中 rpt.Bands[BandKind.PageHeader].Controls.Add(tableHeader); rpt.Bands[BandKind.Detail].Controls.Add(tableDetail); } //創建數據集 private DataSet GetDateSet() { DataSet ds = new DataSet(); using (SqlConnection con = new SqlConnection("server =.;uid=sa;pwd=123;database=test")) { using (SqlDataAdapter adp = new SqlDataAdapter("select id,userName,roles from usersTmp", con)) { adp.Fill(ds); } } return ds; } } }
效果: