C# WinfForm 控件之dev报表 XtraReport (八)动态生成报表
功能说明:生成一个报表文件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 (八)动态生成报表的更多相关文章
- 关于devexpress报表XtraReport,动态修改报表样式(.repx格式),动态添加数据并使用的理解
一.基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控 ...
- C# WinfForm 控件之dev报表 XtraReport (四) 动态绑定主从关系表
一般的单据都是由主从关系的,比如部门与人员.单据表头与表身.仓库与存货.分类与档案等等 所以主从关系是报表用的最多的 1.准备数据库 简单方便 --主表 create table RdRecord ( ...
- C# WinfForm 控件之dev报表 XtraReport(三) 动态数据绑定
代码还用上一节的,把reportFrx的dataSource去掉.各cell绑定的字段也去掉,有了第二节的基础,现在看这个ms就不难了 无非就是 传到reportFrx一个数据集 在把这个数据集 绑到 ...
- C# WinfForm 控件之dev报表 XtraReport (二) 固定数据绑定
已经子解了XtraReport的初步用法 现在再进一步了解 数据绑定 我们还是先不整高深的 先来个写死的 让我们的数据库数据可以通过报表呈现先 1.准备 还在上节基础上 只不过我把form1 中的Do ...
- C# WinfForm 控件之dev报表 XtraReport (一) 初了解
这个控件其实用法和fast也差不了太多但如果没接触过 真有种老虎吃天的感觉 1.这里先不说那些高深的先说最基本的 在窗体中显示一个设计好的 模版 1.1一般设计和这个程序是分着的为了方便我就先把他们合 ...
- C# WinfForm 控件之dev图表 ChartControl
dev 图表控件 学习连接 新建一个winformApp form1上放一个button 再放一个chartControl Name 为cct 直接上代码 private void button1_C ...
- C# WinfForm 控件之dev电子表格 SpreadSheet
网上找了一些资料可是不得入门 只能再回过头来看demos 看了一点 例子大多继承自SpreadsheetRibbonTutorialControlBase 这个类,它又继承自SpreadSheetTu ...
- C# WinfForm 控件之dev报表 XtraReport (七)报表合并
这个不是太难,新建两个报表 一个form窗体 窗体上放个documentView 代码如下 XtraReport2 xr2 = new XtraReport2(); xr2.CreateDocume ...
- C# WinfForm 控件之dev报表 XtraReport (五) 并排报表
有了前边的基础这个就很简单了,建一个容器报表 在detail,上放两个xrsubReport.再做两个明细报表,分别指定到xrsubreport就可以了
随机推荐
- upc组队赛5 Ground Defense【枚举】
Ground Defense 题目描述 You are a denizen of Linetopia, whose n major cities happen to be equally spaced ...
- vue事件修饰符(once:prev:stop)
vue事件修饰符(once:prev:stop) stop修饰符 效果如下: 当你鼠标在这个div里的时候,x与y的值:会随着鼠标的变化而变化.但是当鼠标放在stopMoving的时候,x与y的值是 ...
- Django框架(十五)—— forms组件、局部钩子、全局钩子
目录 forms组件.局部钩子.全局钩子 一.什么是forms组件 二.forms组件的使用 1.使用语法 2.组件的参数 3.注意点 三.渲染模板 四.渲染错误信息 五.局部钩子 1.什么是局部钩子 ...
- ZABBIX 忘记登录密码
ZABBIX 忘记登录密码 摘要 有些童鞋会忘记zabbix的登陆密码,今天给大家写一篇找回登陆密码~ ZABBIX 忘记登录密码 zabbix 刚刚在群里吹牛逼,由于账号比较多,脑子容易 ...
- Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR invalid longitude,latitude pair 111.110000,111.230000
io.lettuce.core.RedisCommandExecutionException: ERR invalid longitude,latitude pair 111.110000,111.2 ...
- 我的.eslintrc.js
module.exports = { root: true, env: { node: true }, extends: ["plugin:vue/essential", &quo ...
- ReactOS 代码更新后的编译安装
其实四月份就已经更新过了,最新版应该是0.4.11+,具体去GITHUB上去看. 至于编译,其实在最早的0.2版本时代,ReactOS就曾经给出过一套完整的编译方式, 并且给出过一个完整的编译环境,版 ...
- mongodb 可视化工具
mongodb是用命令行输入的,有些人可能不太习惯,我自己找了下mongodb的一些可视化工具,发现了一款adminmongo很好用,这里介绍给你们用一下. github地址:https://gith ...
- CF1016F 【Road Projects】
思路 可以考虑另一种想法:因为我们发现,答案是肯定不会大于在原来的树上的最短路径的.所以原来的最短路是(有可能的)最大值! 我们把树变成这样,提取出1~n的路径,方便观看撕烤: (它有个我起的名字,叫 ...
- Bootstrap-table 使用总结 转载https://www.cnblogs.com/laowangc/p/8875526.html
一.什么是Bootstrap-table? 在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这 ...