C# winform 动态构建fastreport报表
private void DoPrint()
{
DataView dv = (DataView)dgv_apply_details.DataSource;
Report report = new Report();
//给report注册数据源
report.RegisterData(dv, "Purchasment");
//设置能在报表中使用
report.GetDataSource("Purchasment").Enabled = true;
ReportPage page1 = new ReportPage();
page1.Name = "Page1";
page1.SetDefaults(); //设置标题
page1.ReportTitle = new ReportTitleBand();
page1.ReportTitle.Name = "ReportTitle1";
page1.ReportTitle.Height = ;//Units.Centimeters * 0.1f;
//给标题赋值
TextObject txtTitle = new TextObject();
txtTitle.Name = "TextTitle";
txtTitle.Bounds = new RectangleF(, , Units.Centimeters * , Units.Centimeters * );
txtTitle.Text = "药品采购汇总单";
txtTitle.HorzAlign = HorzAlign.Center;
txtTitle.VertAlign = VertAlign.Center;
txtTitle.Font = new Font("微软雅黑", , FontStyle.Bold);
page1.ReportTitle.Objects.Add(txtTitle); GroupHeaderBand group1 = new GroupHeaderBand();
group1.Name = "GroupHeader1";
group1.Height = Units.Centimeters * 2f;
group1.Condition = "[Purchasment.order_id]";//分组条件 DataBand data1 = new DataBand();
data1.Name = "Data1";
data1.Height = Units.Centimeters * 1.5f;//Units.Centimeters * 3f;//调的是data里面数据(即dataHeaderBand)的间距,也是table中row之间的间距
data1.DataSource = report.GetDataSource("Purchasment"); #region 分组表头
//GetDataBand(ref dataBand, ref dataHeaderBand);
//TextObject txt2 = new TextObject();
//txt2.Name = "Text2";
//txt2.Bounds = new RectangleF(0, 0, Units.Centimeters * 20, Units.Centimeters * 3);
//txt2.VertAlign = VertAlign.Center;
//txt2.Font = new Font("宋体", 9, FontStyle.Bold);
//txt2.Text = dataHeaderBand;//"订单号:[Purchasment.order_id]";
//group1.Objects.Add(txt2); //TextObject txt3 = new TextObject();
//txt3.Name = "Text3";
//txt3.Bounds = new RectangleF(Units.Centimeters * 8, 0, Units.Centimeters * 20, Units.Centimeters * 3);
//txt3.VertAlign = VertAlign.Center;
//txt3.Text = "申请药房:[Purchasment.storage_name]";
//group1.Objects.Add(txt3); ////<TextObject Name="Text38" Left="198.45" Top="18.9" Width="75.6" Height="28.35" Text="订单状态:" VertAlign="Center"/>
//TextObject txt4 = new TextObject();
//txt4.Name = "Text4";
////txt4.Bounds = new RectangleF(float.Parse("198.45"), float.Parse("18.9"), float.Parse("75.6"), float.Parse("28.35"));
//txt4.Bounds = new RectangleF(Units.Centimeters * 15, 0, Units.Centimeters * 10, Units.Centimeters * 1);
//txt4.VertAlign = VertAlign.Center;
//txt4.Text = "采购科室:[Purchasment.sourceStorage]";
//group1.Objects.Add(txt4);
#endregion
//DataHeaderBand dataHeader1 = new DataHeaderBand();
//dataHeader1.Name = "DataHeader1";
//dataHeader1.Height = Units.Centimeters * 1;
//data1.Objects.Add(dataHeader1);
//GetDataBand(ref dataBand, ref dataHeaderBand); //TextObject txt6 = new TextObject();
//txt6.Name = "Text6";
//txt6.Bounds = new RectangleF(0, Units.Centimeters * 2, Units.Centimeters * 30, Units.Centimeters * 1);
//txt6.Text = dataHeaderBand;
//txt6.Font = new Font("宋体", 9, FontStyle.Bold);
//dataHeader1.Objects.Add(txt6);
////group1.Objects.Add(txt6); //TextObject txt7 = new TextObject();
//txt7.Name = "Text7";
//txt7.Bounds = new RectangleF(0, Units.Centimeters * 3, Units.Centimeters * 30, Units.Centimeters * 1f);
//txt7.Text = dataBand;
//txt7.Font = new Font("宋体", 9);
//data1.Objects.Add(txt7); #region Table表格
TableObject table1 = new TableObject();
table1.Name = "Table1";
table1.Border.Lines = BorderLines.All;
table1.Height = Units.Centimeters * 1.5f;
//table1.Width = Units.Centimeters * 30; #region TableColumn
//TableColumn column1 = new TableColumn();
//column1.Name = "Column1";
//column1.Width = Units.Centimeters * 3;
//table1.AddChild(column1);//AddChild应为添加子节点,适用于table内部
////table1.ChildObjects.Add(column);//试过这种添加方式,不过这样就不显示表格了 //TableColumn column2 = new TableColumn();
//column2.Name = "Column2";
//column2.Width = Units.Centimeters * 3;
//table1.AddChild(column2); //TableColumn column3 = new TableColumn();
//column3.Name = "Column3";
//column3.Width = Units.Centimeters * 3;
//table1.AddChild(column3); //TableColumn column4 = new TableColumn();
//column4.Name = "Column4";
//column4.Width = Units.Centimeters * 3;
//table1.AddChild(column4); //TableColumn column5 = new TableColumn();
//column5.Name = "Column5";
//column5.Width = Units.Centimeters * 3;
//table1.AddChild(column5); //TableColumn column6 = new TableColumn();
//column6.Name = "Column6";
//column6.Width = Units.Centimeters * 3;
//table1.AddChild(column6);
#endregion TableRow row1 = new TableRow();
row1.Name = "Row1";
row1.Height = Units.Centimeters * 1.5f;
table1.AddChild(row1); #region TableCell cell1
//TableCell cell1 = new TableCell();
//cell1.Name = "Cell1";
//cell1.HorzAlign = HorzAlign.Center;
//cell1.VertAlign = VertAlign.Center;
//cell1.Border.Lines = BorderLines.All;
//cell1.Text = "[Purchasment.drug_name]";
//cell1.Font = new Font("宋体", 9);
//row1.AddChild(cell1); //TableCell cell2 = new TableCell();
//cell2.Name = "Cell2";
//cell2.HorzAlign = HorzAlign.Center;
//cell2.VertAlign = VertAlign.Center;
//cell2.Border.Lines = BorderLines.All;
//cell2.Text = "[Purchasment.package_spec]";
//cell2.Font = new Font("宋体", 9);
//row1.AddChild(cell2); //TableCell cell3 = new TableCell();
//cell3.Name = "Cell3";
//cell3.HorzAlign = HorzAlign.Center;
//cell3.VertAlign = VertAlign.Center;
//cell3.Border.Lines = BorderLines.All;
//cell3.Text = "[Purchasment.sale_price]";
//cell3.Font = new Font("宋体", 9);
//row1.AddChild(cell3); //TableCell cell4 = new TableCell();
//cell4.Name = "Cell4";
//cell4.HorzAlign = HorzAlign.Center;
//cell4.VertAlign = VertAlign.Center;
//cell4.Border.Lines = BorderLines.All;
//cell4.Text = "[Purchasment.manufacture_name]";
//cell4.Font = new Font("宋体", 9);
//row1.AddChild(cell4); //TableCell cell5 = new TableCell();
//cell5.Name = "Cell5";
//cell5.HorzAlign = HorzAlign.Center;
//cell5.VertAlign = VertAlign.Center;
//cell5.Border.Lines = BorderLines.All;
//cell5.Text = "[Purchasment.distributor_name]";
//cell5.Font = new Font("宋体", 9);
//row1.AddChild(cell5); //TableCell cell6 = new TableCell();
//cell6.Name = "Cell6";
//cell6.HorzAlign = HorzAlign.Center;
//cell6.VertAlign = VertAlign.Center;
//cell6.Border.Lines = BorderLines.All;
//cell6.Text = "[Purchasment.amount]";
//cell6.Font = new Font("宋体", 9);
//row1.AddChild(cell6);
#endregion SetDataHeaderAndTable(group1, page1.PaperWidth, table1, row1); data1.Objects.Add(table1); #endregion #region 报表底
page1.PageFooter = new PageFooterBand();
page1.PageFooter.Name = "PageFooter1";
page1.PageFooter.Height = Units.Centimeters * ;//这个高度必须>=PageFooter包含文字的RectangleF里面的y的值 TextObject ftxt1 = new TextObject();
ftxt1.Name = "FText1";
ftxt1.Bounds = new RectangleF(, Units.Centimeters * , Units.Centimeters * , Units.Centimeters * );
ftxt1.Text = "打印时间:[Date]";
ftxt1.Font = new Font("宋体", );
ftxt1.VertAlign = VertAlign.Center;
page1.PageFooter.Objects.Add(ftxt1); TextObject ftxt2 = new TextObject();
ftxt2.Name = "FText2";
ftxt2.Bounds = new RectangleF(Units.Centimeters * , Units.Centimeters * , Units.Centimeters * , Units.Centimeters * );
ftxt2.Text = "页码:[PageN]/[TotalPages#]";
ftxt2.Font = new Font("宋体", );
ftxt2.VertAlign = VertAlign.Center;
page1.PageFooter.Objects.Add(ftxt2); TextObject ftxt3 = new TextObject();
ftxt3.Name = "FText3";
ftxt3.Bounds = new RectangleF(Units.Centimeters * , Units.Centimeters * , Units.Centimeters * , Units.Centimeters * );
ftxt3.Text = "打印人:[operator]";
ftxt3.Font = new Font("宋体", );
ftxt3.VertAlign = VertAlign.Center;
page1.PageFooter.Objects.Add(ftxt3);
report.SetParameterValue("operator", SysConfig.UserCode);
#endregion //group1.Objects.Add(data1);
group1.Data = data1;
page1.Bands.Add(group1);
report.Pages.Add(page1);
report.Show();
}
/// <summary>
/// 根据当前显示的字段,动态添加数据首和表格
/// </summary>
private void SetDataHeaderAndTable(GroupHeaderBand group1, float pageWidth, TableObject table1, TableRow row1)
{
int count = ;//记录显示的列数
int index = ;
DataTable dt = OrderBL.SelectFreecombination(this.Name);
if (dt != null)
{
for (int i = ; i < dgv_apply_details.Columns.Count; i++)
{
if (dgv_apply_details.Columns[i].Visible)
{
count++;
}
}
if (count <= )
{
YxMessageBox.ShowWarning("当前没有可打印的数据!");
return;
}
for (int i = ; i < dt.Rows.Count; i++)
{
if (DbHelper.GetBool(dt.Rows[i], "print_status"))
{
TextObject text = new TextObject();
text.Name = "Text" + index.ToString();
text.Bounds = new RectangleF( + index * ( * pageWidth / count), , * pageWidth / count, Units.Centimeters * );
text.VertAlign = VertAlign.Center;
text.Font = new Font("宋体", , FontStyle.Bold);
text.Text = DbHelper.GetString(dt.Rows[i], "header_text");
group1.Objects.Add(text); TableColumn column1 = new TableColumn();
column1.Name = "Column" + index.ToString(); ;
column1.Width = * pageWidth / count;//Units.Centimeters * 3;
table1.AddChild(column1); TableCell cell1 = new TableCell();
cell1.Name = "Cell" + index.ToString(); ;
cell1.HorzAlign = HorzAlign.Center;
cell1.VertAlign = VertAlign.Center;
cell1.Border.Lines = BorderLines.All;
cell1.Text = "[Purchasment." + DbHelper.GetString(dt.Rows[i], "dataproperty_name") + "] ";
cell1.Font = new Font("宋体", );
row1.AddChild(cell1); index++;
}
}
}
}
打印效果如图:


C# winform 动态构建fastreport报表的更多相关文章
- 使用FastReport报表工具生成报表PDF文档
在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...
- FastReport报表设计(仔细看)
FastReport报表设计 2011-06-16 16:56:19| 分类: 系统开发|举报|字号 订阅 下载LOFTER我的照片书 | 目录 5.1 前言 5.2 基本概念及操 ...
- FastReport报表设计
[转载]FastReport报表设计 (2012-10-24 20:37:26) 转载▼ 标签: 转载 原文地址:FastReport报表设计作者:小黑 FastReport报表设计 目录 5.1 ...
- 使用FastReport报表工具生成标签打印文档
在我们实际开发报表的时候,我们需要按一定的业务规则组织好报表的模板设计,让报表尽可能的贴近实际的需求,在之前的随笔中<使用FastReport报表工具生成报表PDF文档>介绍了FastRe ...
- 使用FastReport报表工具生成图片格式文档
之前我在随笔<使用FastReport报表工具生成报表PDF文档>介绍过使用FastReport.Net来根据报表模板进行生成PDF,以及随笔<使用FastReport报表工具生成标 ...
- 使用 SailingEase WinForm 框架构建复合式应用程序(插件式应用程序)
对于一些较小的项目,具备一定经验的开发人员应该能够设计和构建出便于进行维护和扩展的应用程序.但是,随着功能模块数量(以及开发维护这些部件的人员)的不断增加,对项目实施控制的难度开始呈指数级增长. Sa ...
- FastReport报表控件使用技巧总结
FastReport报表控件使用技巧总结 1.FastReport中如何访问报表中的对象? 可以使用FindObject方法. TfrxMemoView(frxReport1.FindObject(' ...
- Winform中在FastReport的PreviewControl预览控件中对report控件模板中控件值进行修改
场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- 使用FastReport报表工具实现信封套打功能
在较早期的报表套打的时候,我倾向于使用LODOP的ActiveX进行报表的打印或者套打,BS效果还是很不错的.之前利用它在Winform程序里面实现信封套打功能,详细参考<基于信封套打以及批量打 ...
随机推荐
- STM32串口USART1的使用方法和程序
通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半 ...
- javascript: 禁用右键、文本选择功能、复制按键
<script type="text/javascript"> //禁用右键.文本选择功能.复制按键 //http://www.jinyuanbao.cn $(docu ...
- Linux下MySQL 命令导入导出sql文件
导出数据库 直接使用命令: mysqldump -u root -p database >database.sql 然后回车输入密码就可以了: mysqldump -u 数据库链接用户名 -p ...
- day 84 Xadmin组件之构建表单数据
一 .先设置一些相关配置 1. 创建数据库模型. 在app01 下创建 from django.db import models # Create your models here. class Au ...
- 网络命令-nc(一)
一直在linux环境下编程,但却没有用过nc命令,不过最近发现Netcat这个命令-nc,发现真的蛮强大的, 为了备忘,就写了这个博客吧,不求全,只求把自己觉得很有用的命令整理出来,这篇文章估计要长期 ...
- HBase 中加盐之后的表如何读取:Spark 篇
在 <HBase 中加盐之后的表如何读取:协处理器篇> 文章中介绍了使用协处理器来查询加盐之后的表,本文将介绍第二种方法来实现相同的功能. 我们知道,HBase 为我们提供了 hbase- ...
- CF560补题
D题:用来对比的vector<long long> b不能被初始化大小成n,因为a里面有n个因子,但是这是可能存在遗漏情况的.如果刚好是遇到实际因子远多于n,那么就会在运行过程中出错. 还 ...
- HTML段落,换行,字符实体
HTML段落,换行,字符实体 html段落 <p>标签定义一个文本段落,一个段落含有默认的上下间距,段落之间会用这种默认间距隔开,代码如下: <!DOCTYPE html> & ...
- Mysql 2019-07-01
- Apache Shiro 认证+授权(一)
1.核心依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-co ...