找回密码
 立即注册

QQ登录

只需一步,快速开始

wugrid

中级会员

8

主题

70

帖子

542

积分

中级会员

积分
542

活字格认证

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

本帖子中包含更多资源

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

x

25 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-7-7 11:44:00
沙发
回复 1楼wugrid的帖子

用FlexGrid创建好表格后,可以使用打印方法。

使用FlexGrid“打印表格”(PrintGrid)方法来打印表格的内容。该方法具有可以让你选择缩放模式,是否显示打印/预览对话框,设置页眉和页脚,等等的参数。

FlexGrid“打印参数”(PrintParameters)属性可以公开额外的打印性能,如字体,使用页眉和页脚,而一个.NET  Framework “打印文档”对象可以用来选择打印机,纸张大小和方向,页边距等。

下面的代码使用了“打印参数”属性来设置页面方向、页边距、页眉和页脚的字体。然后它调用“打印表格”方法来显示打印预览对话框窗口:
  1. // 获取表格的“打印文档”对象。
  2. System.Drawing.Printing.PrintDocument pd = _flex.PrintParameters.PrintDocument;

  3. // 设置页面(横向打印,左边页边距1.5")。
  4. pd.DefaultPageSettings.Landscape = true;
  5. pd.DefaultPageSettings.Margins.Left = 150;

  6. // 设置页眉和页脚的文字。
  7. _flex.PrintParameters.PrintParameters.Header = "产品入库报表\r\n" + "销售单位:\t\t" + "日期:" + Microsoft.VisualBasic.Strings.Format(DateTime.Now, "d");
  8. _flex.PrintParameters.Footer = "\t\tPage {0} of {1}";

  9. // 预览表格。
  10. _flex.PrintGrid("产品入库报表", PrintGridFlags.FitToPageWidth | PrintGridFlags.ShowPreviewDialog);
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-7 12:27:00
板凳
谢谢!不过不是我想要的,不要采用页眉页脚方式,我说的标题是和表格在一起的,不是在页眉上
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-7 12:32:00
地板
第一行大标题采用一种字体,第二行采用一种字体,最后一页的最后一行打印的指定的内容就在表格正下方,分左对齐 和指定位置打印.
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-7 14:56:00
5#
回复 4楼wugrid的帖子

根据你的需求,如果要把内容打印到特定的位置,可以使用C1FlexGrid.PrintParameters.PrintDocument.PrintPage事件。在事件里面指定打印的内容、字体以及打印的位置。

我做了测试程序演示打印1楼的表格,效果如下图:


如下是参考代码,和你实际的大小会有点出入,你可以自己调整代码里面DrawString方法里的x,y,改变打印位置。也可以改变Font,自己给不同的行设置字体。
  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             System.Drawing.Printing.PrintDocument pd = this.c1FlexGrid1.PrintParameters.PrintDocument;
  4.             pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);
  5.             pd.Print();
  6.         }

  7.         void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
  8.         {
  9.             Font fontNr = new System.Drawing.Font("宋体", 16);
  10.             Font fontNr2=new System.Drawing.Font("宋体", 12);
  11.             e.Graphics.DrawString("产品入库报表", fontNr, Brushes.Black, 350, 50);
  12.             e.Graphics.DrawString("销售单位:\t\t\t\t\t"+"日期:"+Microsoft.VisualBasic.Strings.Format(DateTime.Today, "yyyy年MM月dd日"), fontNr2, Brushes.Black, 100, 80);
  13.             
  14.             //打印到最后一页
  15.             if (!e.HasMorePages)
  16.             {
  17.                 Font fontNr3 = new System.Drawing.Font("宋体", 12);
  18.                 e.Graphics.DrawString("接收人:\t\t\t\t\t" + "会计:", fontNr3, Brushes.Black, 100, 480);
  19.             }
  20.         }
复制代码

本帖子中包含更多资源

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

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-7 15:08:00
6#
谢谢!我先试试!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-7 17:28:00
7#
回复 6楼wugrid的帖子

不客气。如果有问题欢迎交流。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-8 09:43:00
8#
还有疑问:如何预览,表格需要居中打印,表格的宽度不一样,打印的第一行如何保证一直是居中打印的?打印第二行如何保证左边左对齐 右边右对齐?水平指定位置不是好办法,C1Report 有没有这些方法?谢谢你的指导
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-8 18:21:00
9#
回复 8楼wugrid的帖子

PrintDocument是微软的标准控件。
1.如何预览?
可以使用PrintPreviewDialog做预览,参考代码:
  1. PrintPreviewDialog preview = new PrintPreviewDialog();
  2. preview.Document = pd;
  3. preview.ShowDialog();
复制代码

2.居中对齐和右对齐需要写代码,根据页面计算位置。Printdocument里有PageSize和Margin等数据可以参考。
3.C1Report不能编辑数据,只能展示报表。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wugrid
中级会员   /  发表于:2014-7-8 19:53:00
10#
非常谢谢!
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部