C#打印多个DataGridView的方法类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;


namespace Demo
{
    /// <summary>
    /// <para>打印DataGridView</para>
    /// <para>用法:传递一个DataGridView数组的实体对象</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);
            }
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值