功能说明:生成一个报表文件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 = ;
reportFooter.HeightF = ;
pageHeader.HeightF = ; xr.Bands.AddRange(new Band[] { detail, pageHeader, reportFooter }); //添加控件
InitDetailsBasedonXRTable(xr);
} public void InitDetailsBasedonXRTable(XtraReport rpt)
{
DataSet ds = (DataSet)rpt.DataSource;
int colCount = ds.Tables[].Columns.Count;//列数
int colWidth = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right)) / colCount;//每列宽 //创建一个列表头
XRTable tableHeader = new XRTable();
tableHeader.HeightF = ;
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 = ;
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 = ; i < colCount; i++)
{
XRTableCell headerCell = new XRTableCell();
headerCell.WidthF = colWidth;//列宽
headerCell.Text = ds.Tables[].Columns[i].Caption; XRTableCell detailCell = new XRTableCell();
detailCell.WidthF = colWidth;
detailCell.DataBindings.Add("Text", null, ds.Tables[].Columns[i].Caption); if (i == )
{
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;
}
}
}

效果:

C# WinfForm 控件之dev报表 XtraReport (八)动态生成报表的更多相关文章

  1. 关于devexpress报表XtraReport,动态修改报表样式(.repx格式),动态添加数据并使用的理解

    一.基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控 ...

  2. C# WinfForm 控件之dev报表 XtraReport (四) 动态绑定主从关系表

    一般的单据都是由主从关系的,比如部门与人员.单据表头与表身.仓库与存货.分类与档案等等 所以主从关系是报表用的最多的 1.准备数据库 简单方便 --主表 create table RdRecord ( ...

  3. C# WinfForm 控件之dev报表 XtraReport(三) 动态数据绑定

    代码还用上一节的,把reportFrx的dataSource去掉.各cell绑定的字段也去掉,有了第二节的基础,现在看这个ms就不难了 无非就是 传到reportFrx一个数据集 在把这个数据集 绑到 ...

  4. C# WinfForm 控件之dev报表 XtraReport (二) 固定数据绑定

    已经子解了XtraReport的初步用法 现在再进一步了解 数据绑定 我们还是先不整高深的 先来个写死的 让我们的数据库数据可以通过报表呈现先 1.准备 还在上节基础上 只不过我把form1 中的Do ...

  5. C# WinfForm 控件之dev报表 XtraReport (一) 初了解

    这个控件其实用法和fast也差不了太多但如果没接触过 真有种老虎吃天的感觉 1.这里先不说那些高深的先说最基本的 在窗体中显示一个设计好的 模版 1.1一般设计和这个程序是分着的为了方便我就先把他们合 ...

  6. C# WinfForm 控件之dev图表 ChartControl

    dev 图表控件 学习连接 新建一个winformApp form1上放一个button 再放一个chartControl Name 为cct 直接上代码 private void button1_C ...

  7. C# WinfForm 控件之dev电子表格 SpreadSheet

    网上找了一些资料可是不得入门 只能再回过头来看demos 看了一点 例子大多继承自SpreadsheetRibbonTutorialControlBase 这个类,它又继承自SpreadSheetTu ...

  8. C# WinfForm 控件之dev报表 XtraReport (七)报表合并

    这个不是太难,新建两个报表 一个form窗体 窗体上放个documentView  代码如下 XtraReport2 xr2 = new XtraReport2(); xr2.CreateDocume ...

  9. C# WinfForm 控件之dev报表 XtraReport (五) 并排报表

    有了前边的基础这个就很简单了,建一个容器报表 在detail,上放两个xrsubReport.再做两个明细报表,分别指定到xrsubreport就可以了

随机推荐

  1. 利用HTML制作一个简单的界面(工具HBuilder)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"><!--标题,里面填写 ...

  2. 第一节:mybatis入门

    1.新建数据表 本次测试使用mysql数据,数据库名称为mybatis,新建一张表person,建表语句如下: CREATE TABLE `person` ( `id` ) PRIMARY KEY a ...

  3. python调用tushare港股通每月成交统计

    接口:ggt_monthly 描述:港股通每月成交信息,数据从2014年开始 限量:单次最大1000 积分:用户积5000积分可调取,请自行提高积分,具体请参阅本文最下方积分获取办法 注:tushar ...

  4. Linux 2.6.x fs/pipe.c local kernel root(kit?) exploit (x86)

    /****************************************************************************** * .:: Impel Down ::. ...

  5. BUUCTF MISC ZIP

    这道题有点烦,拿出来单独写先贴两张图,一会用 首先这题给了68个压缩包,每个压缩包里只有4bytes大小,于是可以想到是crc爆破,自己写的脚本总是被killed,犯懒找了个脚本 import zip ...

  6. js 禁止右击保存图片,禁止拖拽图片

    禁止鼠标右键保存图片 <img src="" oncontextmenu="return false;"> 禁止鼠标拖动图片 <img src ...

  7. KiCAD层颜色修改

    KiCAD层颜色修改 KiCAD的PCB各层的颜色太过于暗淡,有时可能不适合操作者的习惯,尤其是铜层(布线层),这时候就需要去修改层的颜色,具体操作如下图:选择想要修改的层,双击左边颜色框框,进入之后 ...

  8. 项目案例之Pipeline流水线发布JAVA项目(三)

    项目案例之Pipeline流水线发布JAVA项目(三) 链接:https://pan.baidu.com/s/1NZZbocZuNwtQS0eGkkglXQ 提取码:z7gj 复制这段内容后打开百度网 ...

  9. 目标检测从入门到精通—R-CNN详细解析(二)

    R-CNN目标检测详细解析 <Rich feature hierarchies for Accurate Object Detection and Segmentation> Author ...

  10. ES模块的基本用法常见使用问题

    本文作者:高峰,360奇舞团前端工程师,W3C WoT工作组成员. ES6中引入了模块(Modules)的概念,相信大家都已经挺熟悉的了,在日常的工作中应该也都有使用. 本文会简单介绍一下ES模块的优 ...