博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打印出datagrideview里面的内容,用到少量GDI+的知识
阅读量:5733 次
发布时间:2019-06-18

本文共 4946 字,大约阅读时间需要 16 分钟。

 
1 using System;   2 using System.Data;   3 using System.Drawing;   4 using System.Drawing.Printing;   5 using System.Windows.Forms;   6   7   8 namespace InvoiceSystem{
9 10 public partial class Printer : Form 11 {
12 private DataGridView invoiceGrid; 13 private int rowCount = 0; //datagridview行数 14 private int colCount = 0; //datagridview列数 15 private int x = 0; //一个datagridview单元格宽度 16 private int y = 0; //当前行行间距 17 int i = 0; //判断行数for循环的起始值 18 private int rowGap = 60; //行间距 19 private int leftMargin = 50; //正文到左面的左边距 20 private Font font = new Font("Arial", 10); //正文字体 21 private Font headingFont = new Font("Arial", 11, FontStyle.Underline); //标题字体 22 private Font captionFont = new Font("Arial", 10, FontStyle.Bold); 23 private Brush brush = new SolidBrush(Color.Black); 24 private string cellValue = string.Empty; //保存datagridview一个单元格里的内容 25 26 27 public Printer(DataGridView invoiceGrid) 28 {
29 InitializeComponent(); 30 this.invoiceGrid = invoiceGrid; //从外部传入一个datagridview引用 31 32 } 33 34 35 /// 36 /// 打印按钮 37 /// 38 /// 39 /// 40 private void button1_Click(object sender, EventArgs e) 41 {
42 43 printDocument1.DocumentName = "发票列表"; //打印的文档文件名 44 PaperSize ps=new PaperSize("16开",724,1024); //自定义纸张大小 45 //ps.RawKind = 9; //设置为A4 46 printDocument1.DefaultPageSettings.PaperSize = ps; 47 printDocument1.DefaultPageSettings.Landscape = true; //使用横向打印 48 49 printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); //设置函数printDocument1_PrintPage为打印事件处理函数 50 printDialog1.Document = printDocument1; 51 printPreviewDialog1.Document = printDocument1; 52 53 if (printDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK && printPreviewDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 54 {
55 56 printDocument1.Print(); 57 58 59 } 60 } 61 62 63 private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 64 {
65 66 rowCount = invoiceGrid.Rows.Count - 1; 67 colCount = invoiceGrid.ColumnCount; 68 69 //打印标题 70 y += rowGap; 71 x = leftMargin; 72 for (int j = 0; j < colCount; j++) 73 {
74 if (invoiceGrid.Columns[j].Width>0) 75 {
76 cellValue = invoiceGrid.Columns[j].HeaderText; 77 e.Graphics.FillRectangle(new SolidBrush(Color.LightGray), x, y, invoiceGrid.Columns[j].Width, rowGap); //将单元格的背景设置为灰色 78 e.Graphics.DrawRectangle(Pens.Black, x, y, invoiceGrid.Columns[j].Width, rowGap); //画出一个单元格 79 e.Graphics.DrawString(cellValue, headingFont, brush, x, y); //将datagridview标题里的单元格里的内容填入刚才画出的单元格 80 x += invoiceGrid.Columns[j].Width; //宽度向后移一个datagridview单元格宽度的单位 81 } 82 } 83 84 //打印所有行 85 for (; i < rowCount; i++) 86 {
87 y += rowGap; 88 x = leftMargin; 89 90 for (int j = 0; j < colCount; j++) 91 {
92 if (invoiceGrid.Columns[j].Width>0) 93 {
94 cellValue = invoiceGrid.Rows[i].Cells[j].Value.ToString(); 95 e.Graphics.DrawRectangle(Pens.Black, x, y, invoiceGrid.Columns[j].Width, rowGap); 96 e.Graphics.DrawString(cellValue, font, brush, x, y); 97 x += invoiceGrid.Columns[j].Width; 98 } 99 } 100 101 if (y > e.PageBounds.Height) //e.PageBounds.Height表示页边距的高度 102 {
103 //允许多页打印 104 y = 0; 105 e.HasMorePages = true; //如果还有没有打印的就再执行一次print()函数把余下的打印出来 106 i++; 107 return; 108 109 } 110 111 } 112 y += rowGap; 113 114 115 //底部填充空格 116 for (int j = 0; j < colCount; j++) 117 { 118 e.Graphics.DrawString(" ", font, brush, x, y); 119 } 120 i = 0; 121 e.HasMorePages = false; 122 } 123 } 124 }

  效果就是贴出的图片的样子

转载地址:http://zxlwx.baihongyu.com/

你可能感兴趣的文章
android 读取json数据(遍历JSONObject和JSONArray)
查看>>
pyjamas build AJAX apps in Python (like Google did for Java)
查看>>
<JavaScript语言精粹>-读书笔记(一)
查看>>
NPM教程
查看>>
Java学习笔记(40)——Java集合12之fail-fast
查看>>
Centos 配置IP的方式
查看>>
Go 的吉祥物,萌不萌
查看>>
Java 的swing.GroupLayout布局管理器的使用方法和实例
查看>>
Android中Activity和Fragment的生命周期的对比
查看>>
C++Primer_笔记_异常处理
查看>>
分区交换 alter table exchange partition 在线表 历史表交换
查看>>
思科三层交换 HSRP 热备 配置方法
查看>>
zabbix详解:(二)添加被监控机器
查看>>
设计模式单列
查看>>
人像模式的灯光效果?iPhone 8开挂袭来
查看>>
Linux下MongoDB安装与配置
查看>>
DSL配置(PPPOA)
查看>>
WEBRTC执行流程
查看>>
Spring Boot 入门系列
查看>>
Spring Cloud版——电影售票系统<六>使用 Spring Cloud Config 统一管理微服务配置
查看>>