找回密码
 立即注册

QQ登录

只需一步,快速开始

wugrid

中级会员

8

主题

70

帖子

544

积分

中级会员

积分
544

活字格认证

wugrid
中级会员   /  发表于:2014-7-7 09:31  /   查看:19092  /  回复:25
你好!
我的需求是:按照表格内容打印如图所示
的效果:第一行大标题;第二行相关说明分左右;第三行开始打印显示的表格内容;最后一页的最后一行打印一些指定的内容.第一行第二行和表格的头每页都要打印.如何采用winform的C1flexgrid 及相关的对象来实现.附上效果图.谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

25 个回复

正序浏览
Alice
社区贡献组   /  发表于:2014-7-14 17:42:00
26#
回复 25楼wugrid的帖子

不用客气。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-14 14:53:00
25#
回复 22楼Alice的帖子

谢谢你的指导 添麻烦了
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-14 14:53:00
24#
回复 22楼Alice的帖子

在你发的程序基础上,做了一些修改,基本达到了要求,不需要预定义每页行数和列数,不要求等高.
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-14 14:45:00
23#
回复 22楼Alice的帖子

已经没有8.0的功能,我仔细试过.
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-14 14:08:00
22#
回复 21楼wugrid的帖子

请问,在8.0下是用什么方法实现的?方便发个Sample么?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-13 08:54:00
21#
回复 19楼Alice的帖子

经过测试,不能到达效果,表格的行数和列数固定太不现实,经常是最后一行的Y 值有些离谱,如果行高不是等高又如何?为什么没有以前控件8.0的功能?用8.0写好的程序不用修改在任何表格下都能通用.
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-11 18:39:00
20#
回复 19楼Alice的帖子

功夫不负有心人,终于得到答案.非常感谢!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-11 17:36:00
19#
回复 18楼wugrid的帖子

你好,你需要的功能已经实现了。第一行、第二行以及最后一行的打印位置都是需要自己计算的,下面附件的例子里的位置都是按照页面写代码计算的。

使用我在14楼给你的Sample,并调用之前提到的PrintPage事件就可以了。
1.重写PrintDocument,并且暴露一个最后一页的Size的属性。参考代码:
  1. public Size LastPageSize
  2.         {
  3.             get { return (_images[_images.Count-1] as Image).Size; }
  4.         }
复制代码

2.调用PrintPage事件,并且在该事件里DrawString,把你的那些输出字符串画出来,代码参考:
  1. void fpd_PrintPage(object sender, PrintPageEventArgs e)
  2.         {
  3.             StringFormat sfCenter = new StringFormat();
  4.             sfCenter.Alignment = StringAlignment.Center;

  5.             string firstLine = "产品入库报表";
  6.             Font fontNr = new System.Drawing.Font("宋体", 16);
  7.             Size fistLineSize = TextRenderer.MeasureText(firstLine, fontNr);

  8.             string secondLineLeft = "销售单位:";
  9.             Font fontNr2 = new System.Drawing.Font("宋体", 12);
  10.             Size secondLineLeftSize = TextRenderer.MeasureText(secondLineLeft, fontNr2);

  11.             string secondLineRight ="日期:"+string.Format("{0:yyyy年MM月dd日}",DateTime.Today);
  12.             Size secondLineRightSize = TextRenderer.MeasureText(secondLineRight, fontNr2);
  13.            
  14.             int left = e.MarginBounds.Left;
  15.             int right = e.MarginBounds.Left + posSize.Width -  secondLineRightSize.Width;
  16.             int center = e.MarginBounds.Left + posSize.Width / 2;
  17.             int firstTop = e.MarginBounds.Top - fistLineSize.Height - secondLineRightSize.Height;
  18.             int secondTop = e.MarginBounds.Top - secondLineRightSize.Height;

  19.             e.Graphics.DrawString(firstLine, fontNr, Brushes.Black, center, firstTop, sfCenter);                  
  20.             e.Graphics.DrawString(secondLineLeft, fontNr2, Brushes.Black, left, secondTop);
  21.             e.Graphics.DrawString(secondLineRight, fontNr2, Brushes.Black, right, secondTop);

  22.             if (!e.HasMorePages)
  23.             {
  24.                 string lastLineLeft = "接收人:";
  25.                 string LastLineRight = "会计:";
  26.                 int lastTop = e.MarginBounds.Top + posSize.Height;
  27.                      
  28.                 e.Graphics.DrawString(lastLineLeft, fontNr2, Brushes.Black, left, lastTop);
  29.                 e.Graphics.DrawString(LastLineRight, fontNr2, Brushes.Black, right, lastTop);
  30.             }
  31.         }
复制代码

3.根据上述代码,你所需的Y的值就是最后一页打印的数据的高度加页面的Margin高度,即e.MarginBounds.Top + posSize.Height。


最后一页效果:


例子在附件里:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-11 10:52:00
18#
回复 17楼iceman的帖子

一直在等待你的新进展...
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部