功能说明:生成一个报表文件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. 2.3 Nginx服务的启停控制

    在Linux平台下,控制Nginx服务的启停有多种方法 2.3.1 Nginx服务的信号控制 在Nginx服务的启停办法中,有一类是通过信号机制来实现的,Nginx服务器的信号控制如下: Nginx服 ...

  2. POJ 1052 MPI Maelstrom

    MPI Maelstrom Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5547   Accepted: 3458 Des ...

  3. [ACM] POJ 1218 THE DRUNK JAILER (关灯问题)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sr19930829/article/details/37727417 THE DRUNK JAILE ...

  4. Apache启动后出现You don't have permission to access on this server的解决办法

    安装好wampserver想在浏览器打开运行php的结果,发现: You don't have permission to access on this server 解决办法是: 在Apache的根 ...

  5. 杭电多校第六场-J-Ridiculous Netizens

    Problem Description Mr. Bread has a tree T with n vertices, labeled by 1,2,…,n. Each vertex of the t ...

  6. 小白的第一篇python博客

    学习python课程三天,先了解了计算机的历史及各种发展史,python的历史及部分语法,python主要学习内容有"hello world",int常量.str字符串,print ...

  7. 39th 迷迷糊糊 二豆玩不转了

    今天学的语法 1.   #  {} . format()的传送作用 请从键盘获取一个整数,求他的平方根,要求: 1 如果这个整数是大于等于0,则直接打印其平方根 2 否则, 打印其绝对值的平方根 x ...

  8. hdu 5792 树状数组+离散化+思维

    题目大意: Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a< ...

  9. mysql 日期函数大全

    对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型. 这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: my ...

  10. javaWEB 之文件的上传

    1.1 文件上传三要素 提供form表单,method必须是post form表单的enctype必须是multipart/form-data 提供 input type=“file” 类型输入 1. ...