using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Drawing.Printing; using System.Data; using System.Windows.Forms;
namespace WindowsApplication1 { //// <summary> /// Summary description for DatagridPrint. /// </summary> public class DatagridPrint { private PrintDocument printDocument; private PageSetupDialog pageSetupDialog; private PrintPreviewDialog printPreviewDialog;
public DatagridPrint() { InitializeComponent(); printDocument = new PrintDocument(); printDocument.PrintPage += new PrintPageEventHandler(this.printDocument_PrintPage); }
//i是记录打印的表中的行号,lineQty是表中总共打印的行数.//count是当前页的行记数器,linesPerPage是每页可以打多少行. int i = 0; int lineQty = 0; int count = 0 ; int linesPerPage = 14;
private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { int x = 30; int y = 30;
Font font = new Font("Arial", 10); Font PriceFont = new Font("Arial", 15, FontStyle.Bold); Font NameFont = new Font("Arial", 11, FontStyle.Regular); Brush brush = new SolidBrush(Color.Black);
if (!e.HasMorePages) { lineQty = dataGridView1.Rows.Count;
while (count < linesPerPage && i < lineQty) { if (i % 2 == 0) { e.Graphics.DrawString((String)dataGridView1.Rows[i].Cells[0].Value, NameFont, brush, x + 200, y);
e.Graphics.DrawString((String)dataGridView1.Rows[i].Cells[1].Value, font, brush, x + 200, (y + 30)); e.Graphics.DrawString(dataGridView1.Rows[i].Cells[2].Value.ToString(), font, brush, x + 300, (y + 30));
e.Graphics.DrawString((String)dataGridView1.Rows[i].Cells[5].Value, PriceFont, brush, x, y + 75); e.Graphics.DrawString((String)dataGridView1.Rows[i].Cells[6].Value, font, brush, x + 200, y + 90); } else { e.Graphics.DrawString((String)dataGridView1.Rows[i].Cells[0].Value, NameFont, brush, x + 600, y);
e.Graphics.DrawString((String)dataGridView1.Rows[i].Cells[1].Value, font, brush, x + 600, y + 30); e.Graphics.DrawString(dataGridView1.Rows[i].Cells[2].Value.ToString(), font, brush, x + 700, y + 30);
e.Graphics.DrawString((String)dataGridView1.Rows[i].Cells[5].Value, PriceFont, brush, x + 400, y + 75); e.Graphics.DrawString((String)dataGridView1.Rows[i].Cells[6].Value, font, brush, x + 600, y + 90);
y = y + 150; } count++; i++; } }
if (i < lineQty) { e.HasMorePages = true; } else { i = 0; e.HasMorePages = false; } count = 0; }
public PrintDocument GetPrintDocument() { return printDocument; }
public void Print() { try { pageSetupDialog = new PageSetupDialog(); pageSetupDialog.Document = printDocument; pageSetupDialog.ShowDialog(); printPreviewDialog = new PrintPreviewDialog(); printPreviewDialog.Document = printDocument; printPreviewDialog.Height = 600; printPreviewDialog.Width = 800; printPreviewDialog.ShowDialog(); } catch(Exception e) { throw new Exception("Printer error." + e.Message); } } } }