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报表的更多相关文章

  1. 使用FastReport报表工具生成报表PDF文档

    在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...

  2. FastReport报表设计(仔细看)

    FastReport报表设计 2011-06-16 16:56:19|  分类: 系统开发|举报|字号 订阅     下载LOFTER我的照片书  |     目录 5.1 前言 5.2 基本概念及操 ...

  3. FastReport报表设计

    [转载]FastReport报表设计 (2012-10-24 20:37:26) 转载▼ 标签: 转载   原文地址:FastReport报表设计作者:小黑 FastReport报表设计 目录 5.1 ...

  4. 使用FastReport报表工具生成标签打印文档

    在我们实际开发报表的时候,我们需要按一定的业务规则组织好报表的模板设计,让报表尽可能的贴近实际的需求,在之前的随笔中<使用FastReport报表工具生成报表PDF文档>介绍了FastRe ...

  5. 使用FastReport报表工具生成图片格式文档

    之前我在随笔<使用FastReport报表工具生成报表PDF文档>介绍过使用FastReport.Net来根据报表模板进行生成PDF,以及随笔<使用FastReport报表工具生成标 ...

  6. 使用 SailingEase WinForm 框架构建复合式应用程序(插件式应用程序)

    对于一些较小的项目,具备一定经验的开发人员应该能够设计和构建出便于进行维护和扩展的应用程序.但是,随着功能模块数量(以及开发维护这些部件的人员)的不断增加,对项目实施控制的难度开始呈指数级增长. Sa ...

  7. FastReport报表控件使用技巧总结

    FastReport报表控件使用技巧总结 1.FastReport中如何访问报表中的对象? 可以使用FindObject方法. TfrxMemoView(frxReport1.FindObject(' ...

  8. Winform中在FastReport的PreviewControl预览控件中对report控件模板中控件值进行修改

    场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  9. 使用FastReport报表工具实现信封套打功能

    在较早期的报表套打的时候,我倾向于使用LODOP的ActiveX进行报表的打印或者套打,BS效果还是很不错的.之前利用它在Winform程序里面实现信封套打功能,详细参考<基于信封套打以及批量打 ...

随机推荐

  1. English-accomplish、complete、finish、achieve and fulfill

    accomplish to succeed in doing something, especially after trying very hard vt. 完成:实现:达到 complete us ...

  2. python的列表 元组 字典

    列表和元组都是序列,是数据元素的集合,数据元素可以是数值.字符串,布尔值.对象等. 一.列表:用方括号定义[] 空列表 names = [] 带值的列表 names = ["bill&quo ...

  3. win7系统 无线路由关闭了ssid广播 我手动设置了SSID和密码仍然连接不上

    http://zhidao.baidu.com/link?url=KwDGWPc67avpj2OUPg5UqvtqE_80R80P3xzhNIRI1_X5WnSLG7PLEpybb4TnzDAYAB6 ...

  4. 通过export方式导出,在导入时要加{ },export default则不需要

    怎么就是记不住呢?? 通过export方式导出,在导入时要加{ },export default则不需要

  5. Python笔记(五)_内置函数BIF

    查看所有的内置函数:dir(__builtins__) abs()   获取绝对值 max()   返回给定元素中的最大值 min()   返回给定元素中的最小值 sum()   求和 reverse ...

  6. Python 与 C 对比

    到目前为止,我接触最多两种语言应该就是python 和 C 语言了. 个人理解 1. 执行速度不同, python为解释性语言,C是编译型语言(需要编译器) 2. python 是基于C的实现,C中很 ...

  7. 使用matplotlib画出log的图像

    以下内容是学习笔记,若有侵权,立即删除! import math import matplotlib.pyplot as plt import numpy as np if __name__ == ' ...

  8. JavaScript 模拟后台任务

    读书笔记,请勿转载,发布,产权不归我所有,归以前作者所有,我只是做读书笔记. /*! * Copyright 2015 Google Inc. All rights reserved. * * Lic ...

  9. springCloud的使用05-----路由网关(zuul)

    zuul的主要功能是路由转发和过滤,比如让所有/api-a/*的请求都转发到服务器a上,所有/api-b/*的请求都转发到服务器b上,zuul默认和ribbon结合实现了负载均衡的功能. 1 zuul ...

  10. Java集合框架的基础接口有哪些?

    Collection为集合层级的根接口.一个集合代表一组对象,这些对象即为它的元素.Java平台不提供这个接口任何直接的实现. Set是一个不能包含重复元素的集合.这个接口对数学集合抽象进行建模,被用 ...