zoukankan      html  css  js  c++  java
  • [C#] 打印DataGridView类

    来源:http://topic.csdn.net/u/20081111/14/84a390dd-5665-445e-897a-2c728dd865b8.html

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.Drawing;
    using System.Drawing.Printing;
    using System.Windows.Forms;


    /// <summary>
    /// <para>打印DataGridView</para>
    /// <para>用法:</para>
    /// <para>   DataGridViewPrint dgvPrint = new DataGridViewPrint(new DataGridView[] { DataGridView1,DataGridView2 });</para>
    /// <para>   dgvPrint.Print();</para>
    /// </summary>
    public class DataGridViewPrint
    {
    private DataGridView[] dataGridView;
    private PrintDocument printDocument;
    private PageSetupDialog pageSetupDialog;
    private PrintPreviewDialog printPreviewDialog;

    private int dgvIndex = 0;

    private int rowCount = 0;
    private int colCount = 0;
    private int x = 0;
    private int y = 0;
    int i = 0;

    private int rowGap = 60;
    private int leftMargin = 50;
    private Font font = new Font("Arial", 10);
    private Font headingFont = new Font("Arial", 11, FontStyle.Underline);
    private Font captionFont = new Font("Arial", 10, FontStyle.Bold);
    private Brush brush = new SolidBrush(Color.Black);
    private string cellValue = string.Empty;



    public DataGridViewPrint(DataGridView[] dataGridView)
    {
    this.dataGridView = dataGridView;
    printDocument
    = new PrintDocument();
    printDocument.PrintPage
    += new PrintPageEventHandler(this.printDocument_PrintPage);
    }



    private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
    for (; dgvIndex < dataGridView.Length; dgvIndex++)
    {



    rowCount
    = dataGridView[dgvIndex].Rows.Count - 1;

    colCount
    = dataGridView[dgvIndex].ColumnCount;

    //print headings
    y += rowGap;
    x
    = leftMargin;
    for (int j = 0; j < colCount; j++)
    {
    if (dataGridView[dgvIndex].Columns[j].Width > 0)
    {
    cellValue
    = dataGridView[dgvIndex].Columns[j].HeaderText;
    e.Graphics.FillRectangle(
    new SolidBrush(Color.LightGray), x, y, dataGridView[dgvIndex].Columns[j].Width, rowGap);
    e.Graphics.DrawRectangle(Pens.Black, x, y, dataGridView[dgvIndex].Columns[j].Width, rowGap);
    e.Graphics.DrawString(cellValue, headingFont, brush, x, y);
    x
    += dataGridView[dgvIndex].Columns[j].Width;
    }
    }
    //print all rows
    for (; i < rowCount; i++)
    {
    y
    += rowGap;
    x
    = leftMargin;
    for (int j = 0; j < colCount; j++)
    {
    if (dataGridView[dgvIndex].Columns[j].Width > 0)
    {
    cellValue
    = dataGridView[dgvIndex].Rows[i].Cells[j].Value.ToString();
    e.Graphics.DrawRectangle(Pens.Black, x, y, dataGridView[dgvIndex].Columns[j].Width, rowGap);
    e.Graphics.DrawString(cellValue, font, brush, x, y);
    x
    += dataGridView[dgvIndex].Columns[j].Width;
    }
    }
    if (y >= e.PageBounds.Height - 80)
    {
    // 允許多頁打印
    y = 0;
    e.HasMorePages
    = true;
    i
    ++;

    return;
    }
    }
    y
    += rowGap;
    for (int j = 0; j < colCount; j++)
    {
    e.Graphics.DrawString(
    " ", font, brush, x, y);
    }
    i
    = 0;

    }
    e.HasMorePages
    = false;
    }


    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);
    }
    }
    }
  • 相关阅读:
    AS3邮件
    JavaScript中this关键字使用方法详解
    AS3嵌入字体
    xp双击打不开jar包解决方案
    查询在表1表2中都存在,在表3中不存在的SQL(前提:表结构相同)
    这是否为复制Bug?求解!
    批处理添加允许弹出临时窗口站点
    SQL Server 合并IP
    C#学习笔记一(变量、属性、方法,构造函数)
    SQLServer事务的隔离级别
  • 原文地址:https://www.cnblogs.com/hcbin/p/1688974.html
Copyright © 2011-2022 走看看