功能说明:生成一个报表文件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; } } }
效果: