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