功能说明:生成一个报表文件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. 驱动中PAGED_CODE的作用

    参考:http://blog.csdn.net/broadview2006/article/details/4171397 里面的内容出自<Windows内核情景分析> 简而言之,Wind ...

  2. Node.js、vue.js的使用

    Vue.js的使用 1.下载Node.js 2.打开cmd 3.执行命令 npm i 4.输入命令 npm run serve 5.浏览器打开  http://localhost:8080

  3. 一步一步学Vue(六)https://www.cnblogs.com/Johnzhang/p/7242640.html

    一步一步学Vue(六):https://www.cnblogs.com/Johnzhang/p/7237065.html  路由 一步一步学Vue(七):https://www.cnblogs.com ...

  4. __attribute__((regparm(3))) from GNU C

    在 x86 上,regparm 属性会传递一个数值给编译器,这个数值会告诉编译器要用多少个寄存器来传递函数参数(EAX, EDX 或 ECX,最多 3 个寄存器),通常情况下函数是用堆栈来传递参数的. ...

  5. application/json和application/x-www-form-urlencoded参数接收

    application/json ajax请求中content-type:application/json代表参数以json字符串传递给后台,controller接收需要@RequestBody 接收 ...

  6. PyCharm与git/GitHub取消关联

    如果你从github 上down下的个项目,用pycharm 打开的时候,选择了git管理,导致你只要做了修改,就会有颜失标记,即使没有强迫症,看着也很难受啊 聪敏的我赶快找度娘,总结如下解决方法 在 ...

  7. enovia plm export to sap

    UPC creation UPC 结构 PLM 使用的UPC 是 14个数字组成的,兼容. 前两位为 0,后12位为有效数字,在SAP中0会被忽略,符合国际UPC通用 规则, 前一位为0,后13 位为 ...

  8. CSS3 新特性(box-sizing盒模型,背景线性渐变,filter滤镜,calc函数,transition过渡)

    1.盒子模型(box-sizing) CSS3 中可以通过 box-sizing 来指定盒模型,有两个值:即可指定为 content-box.border-box,这样我们计算盒子大小的方式就发生了改 ...

  9. RK3288 GPIO控制

    参考: https://blog.csdn.net/kris_fei/article/details/69553422

  10. TCP 三次握手和四次挥手中的ACK 为什么总是SYN + 1 或者 FIN +1 而不是+ 其他数值?

    TCP 三次握手的时候 1.客户端 向服务端发起连接请求,这个时候客户端将发送一个SYN分节(假设其值为J),它告诉服务端我发送数据的初始序列号将是J. 2.服务端收到这个请求后,必须确认(ACK) ...