最近评论问题比较多,这是几年前得代码了,今天正好有时间我重新整理了下代码把源码Demo发上来给大家看看互相学习。

有问题随时交流。没有积分得私信我发你。

Demo地址:DataGirdView打印.rar-C#文档类资源-CSDN下载

//调用GridPrinter首先添加一个printDocument控件并激活其printDocument_PrintPage事件写:实例化类GridPrinter gridPrinter;private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{bool more = gridPrinter.DrawDataGridView(e.Graphics);if (more == true)e.HasMorePages = true;
}//定义一个bool方法private bool InitializePrinting()
{PrintDialog printDialog = new PrintDialog();//printDialog.AllowCurrentPage = true;//printDialog.AllowPrintToFile = true;//printDialog.AllowSelection = true;//printDialog.AllowSomePages = true;//printDialog.PrintToFile = true;//printDialog.ShowHelp = true;//printDialog.ShowNetwork = true;if (printDialog.ShowDialog() != DialogResult.OK)return false;printDocument.DocumentName = "人员基本信息";printDocument.PrinterSettings = printDialog.PrinterSettings;printDocument.DefaultPageSettings =   printDialog.PrinterSettings.DefaultPageSettings;printDocument.DefaultPageSettings.Margins = new Margins(40, 40, 40, 40);gridPrinter = new GridPrinter(dataGridView1, printDocument, true, true, "人员基本信息", new Font("黑体", 18, FontStyle.Bold, GraphicsUnit.Point), Color.Blue, true);return true;
}//打印按钮中添加如下代码:if (InitializePrinting())
{PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();printPreviewDialog.Document = printDocument;printPreviewDialog.ShowDialog();
}

//运行效果如图所示:

点确定按钮后如图所示:

//公用打印类using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using System.Data;
using System.Windows.Forms;public class GridPrinter
{// the grid to printprivate DataGridView dataGridView;// the PrintDocumentprivate PrintDocument printDocument;// center printout?private bool centerOnPage;// has a title?private bool hasTitle;// titleprivate string title;// fontprivate Font titleFont;// title colorprivate Color titleColor;// use paging?private bool paging;// row printingstatic int currentRow;// page printingstatic int pageNumber;// page widthprivate int pageWidth;// page heightprivate int pageHeight;// left marginprivate int leftMargin;// top marginprivate int topMargin;// right marginprivate int rightMargin;// bottom marginprivate int bottomMargin;// y location placeholderprivate float currentY;// grid sizesprivate float rowHeaderHeight;private List<float> rowsHeight;private List<float> columnsWidth;private float dataGridViewWidth;// column stop pointsprivate List<int[]> mColumnPoints;private List<float> mColumnPointsWidth;private int mColumnPoint;public GridPrinter(DataGridView objDataGridView, PrintDocument objPrintDocument, bool bCenterOnPage, bool bHasTitle, string sTitle, Font objTitleFont, Color objTitleColor, bool bPaging){dataGridView = objDataGridView;printDocument = objPrintDocument;centerOnPage = bCenterOnPage;hasTitle = bHasTitle;title = sTitle;titleFont = objTitleFont;titleColor = objTitleColor;paging = bPaging;pageNumber = 0;rowsHeight = new List<float>();columnsWidth = new List<float>();mColumnPoints = new List<int[]>();mColumnPointsWidth = new List<float>();if (!printDocument.DefaultPageSettings.Landscape){pageWidth = printDocument.DefaultPageSettings.PaperSize.Width;pageHeight = printDocument.DefaultPageSettings.PaperSize.Height;}else{pageHeight = printDocument.DefaultPageSettings.PaperSize.Width;pageWidth = printDocument.DefaultPageSettings.PaperSize.Height;}leftMargin = printDocument.DefaultPageSettings.Margins.Left;topMargin = printDocument.DefaultPageSettings.Margins.Top;rightMargin = printDocument.DefaultPageSettings.Margins.Right;bottomMargin = printDocument.DefaultPageSettings.Margins.Bottom;currentRow = 0;}// calculate printing metricsprivate void Calculate(Graphics g){if (pageNumber == 0){SizeF tmpSize = new SizeF();Font tmpFont;float tmpWidth;dataGridViewWidth = 0;for (int i = 0; i < dataGridView.Columns.Count; i++){tmpFont = dataGridView.ColumnHeadersDefaultCellStyle.Font;if (tmpFont == null)tmpFont = dataGridView.DefaultCellStyle.Font;tmpSize = g.MeasureString(dataGridView.Columns[i].HeaderText, tmpFont);tmpWidth = tmpSize.Width;rowHeaderHeight = tmpSize.Height;for (int j = 0; j < dataGridView.Rows.Count; j++){tmpFont = dataGridView.Rows[j].DefaultCellStyle.Font;if (tmpFont == null)tmpFont = dataGridView.DefaultCellStyle.Font;tmpSize = g.MeasureString("Anything", tmpFont);rowsHeight.Add(tmpSize.Height);tmpSize = g.MeasureString(dataGridView.Rows[j].Cells[i].EditedFormattedValue.ToString(), tmpFont);if (tmpSize.Width > tmpWidth)tmpWidth = tmpSize.Width;}if (dataGridView.Columns[i].Visible)dataGridViewWidth += tmpWidth;columnsWidth.Add(tmpWidth);}int k;int mStartPoint = 0;for (k = 0; k < dataGridView.Columns.Count; k++)if (dataGridView.Columns[k].Visible){mStartPoint = k;break;}int mEndPoint = dataGridView.Columns.Count;for (k = dataGridView.Columns.Count - 1; k >= 0; k--)if (dataGridView.Columns[k].Visible){mEndPoint = k + 1;break;}float mTempWidth = dataGridViewWidth;float mTempPrintArea = (float)pageWidth - (float)leftMargin - (float)rightMargin;if (dataGridViewWidth > mTempPrintArea){mTempWidth = 0.0F;for (k = 0; k < dataGridView.Columns.Count; k++){if (dataGridView.Columns[k].Visible){mTempWidth += columnsWidth[k];if (mTempWidth > mTempPrintArea){mTempWidth -= columnsWidth[k];mColumnPoints.Add(new int[] { mStartPoint, mEndPoint });mColumnPointsWidth.Add(mTempWidth);mStartPoint = k;mTempWidth = columnsWidth[k];}}mEndPoint = k + 1;}}mColumnPoints.Add(new int[] { mStartPoint, mEndPoint });mColumnPointsWidth.Add(mTempWidth);mColumnPoint = 0;}}// header printingprivate void DrawHeader(Graphics g){currentY = (float)topMargin;if (paging){pageNumber++;string PageString = "Page " + pageNumber.ToString();StringFormat PageStringFormat = new StringFormat();PageStringFormat.Trimming = StringTrimming.Word;PageStringFormat.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip;PageStringFormat.Alignment = StringAlignment.Far;Font PageStringFont = new Font("Arial", 8, FontStyle.Regular, GraphicsUnit.Point);RectangleF PageStringRectangle = new RectangleF((float)leftMargin, currentY, (float)pageWidth - (float)rightMargin - (float)leftMargin, g.MeasureString(PageString, PageStringFont).Height);g.DrawString(PageString, PageStringFont, new SolidBrush(Color.Black), PageStringRectangle, PageStringFormat);currentY += g.MeasureString(PageString, PageStringFont).Height;}if (hasTitle){StringFormat TitleFormat = new StringFormat();TitleFormat.Trimming = StringTrimming.Word;TitleFormat.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip;if (centerOnPage)TitleFormat.Alignment = StringAlignment.Center;elseTitleFormat.Alignment = StringAlignment.Near;RectangleF TitleRectangle = new RectangleF((float)leftMargin, currentY, (float)pageWidth - (float)rightMargin - (float)leftMargin, g.MeasureString(title, titleFont).Height);g.DrawString(title, titleFont, new SolidBrush(titleColor), TitleRectangle, TitleFormat);currentY += g.MeasureString(title, titleFont).Height;}float CurrentX = (float)leftMargin;if (centerOnPage)           CurrentX += (((float)pageWidth - (float)rightMargin - (float)leftMargin) - mColumnPointsWidth[mColumnPoint]) / 2.0F;Color HeaderForeColor = dataGridView.ColumnHeadersDefaultCellStyle.ForeColor;if (HeaderForeColor.IsEmpty)HeaderForeColor = dataGridView.DefaultCellStyle.ForeColor;SolidBrush HeaderForeBrush = new SolidBrush(HeaderForeColor);Color HeaderBackColor = dataGridView.ColumnHeadersDefaultCellStyle.BackColor;if (HeaderBackColor.IsEmpty)HeaderBackColor = dataGridView.DefaultCellStyle.BackColor;SolidBrush HeaderBackBrush = new SolidBrush(HeaderBackColor);Pen TheLinePen = new Pen(dataGridView.GridColor, 1);Font HeaderFont = dataGridView.ColumnHeadersDefaultCellStyle.Font;if (HeaderFont == null)HeaderFont = dataGridView.DefaultCellStyle.Font;RectangleF HeaderBounds = new RectangleF(CurrentX, currentY, mColumnPointsWidth[mColumnPoint], rowHeaderHeight);g.FillRectangle(HeaderBackBrush, HeaderBounds);StringFormat CellFormat = new StringFormat();CellFormat.Trimming = StringTrimming.Word;CellFormat.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip;RectangleF CellBounds;float ColumnWidth;       for (int i = (int)mColumnPoints[mColumnPoint].GetValue(0); i < (int)mColumnPoints[mColumnPoint].GetValue(1); i++){if (!dataGridView.Columns[i].Visible) continue;ColumnWidth = columnsWidth[i];if (dataGridView.ColumnHeadersDefaultCellStyle.Alignment.ToString().Contains("Right"))CellFormat.Alignment = StringAlignment.Far;else if (dataGridView.ColumnHeadersDefaultCellStyle.Alignment.ToString().Contains("Center"))CellFormat.Alignment = StringAlignment.Center;elseCellFormat.Alignment = StringAlignment.Near;CellBounds = new RectangleF(CurrentX, currentY, ColumnWidth, rowHeaderHeight);g.DrawString(dataGridView.Columns[i].HeaderText, HeaderFont, HeaderForeBrush, CellBounds, CellFormat);if (dataGridView.RowHeadersBorderStyle != DataGridViewHeaderBorderStyle.None)g.DrawRectangle(TheLinePen, CurrentX, currentY, ColumnWidth, rowHeaderHeight);CurrentX += ColumnWidth;}currentY += rowHeaderHeight;}// common row printing functionprivate bool DrawRows(Graphics g){Pen TheLinePen = new Pen(dataGridView.GridColor,1);Font RowFont;Color RowForeColor;Color RowBackColor;SolidBrush RowForeBrush;SolidBrush RowBackBrush;SolidBrush RowAlternatingBackBrush;StringFormat CellFormat = new StringFormat();CellFormat.Trimming = StringTrimming.Word;CellFormat.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit;RectangleF RowBounds;float CurrentX;float ColumnWidth;while (currentRow < dataGridView.Rows.Count){if (dataGridView.Rows[currentRow].Visible){RowFont = dataGridView.Rows[currentRow].DefaultCellStyle.Font;if (RowFont == null)RowFont = dataGridView.DefaultCellStyle.Font;RowForeColor = dataGridView.Rows[currentRow].DefaultCellStyle.ForeColor;if (RowForeColor.IsEmpty)RowForeColor = dataGridView.DefaultCellStyle.ForeColor;RowForeBrush = new SolidBrush(RowForeColor);RowBackColor = dataGridView.Rows[currentRow].DefaultCellStyle.BackColor;if (RowBackColor.IsEmpty){RowBackBrush = new SolidBrush(dataGridView.DefaultCellStyle.BackColor);RowAlternatingBackBrush = new SolidBrush(dataGridView.AlternatingRowsDefaultCellStyle.BackColor);}else{RowBackBrush = new SolidBrush(RowBackColor);RowAlternatingBackBrush = new SolidBrush(RowBackColor);}CurrentX = (float)leftMargin;if (centerOnPage)                   CurrentX += (((float)pageWidth - (float)rightMargin - (float)leftMargin) - mColumnPointsWidth[mColumnPoint]) / 2.0F;RowBounds = new RectangleF(CurrentX, currentY, mColumnPointsWidth[mColumnPoint], rowsHeight[currentRow]);if (currentRow % 2 == 0)g.FillRectangle(RowBackBrush, RowBounds);elseg.FillRectangle(RowAlternatingBackBrush, RowBounds);for (int CurrentCell = (int)mColumnPoints[mColumnPoint].GetValue(0); CurrentCell < (int)mColumnPoints[mColumnPoint].GetValue(1); CurrentCell++){if (!dataGridView.Columns[CurrentCell].Visible) continue;if (dataGridView.Columns[CurrentCell].DefaultCellStyle.Alignment.ToString().Contains("Right"))CellFormat.Alignment = StringAlignment.Far;else if (dataGridView.Columns[CurrentCell].DefaultCellStyle.Alignment.ToString().Contains("Center"))CellFormat.Alignment = StringAlignment.Center;elseCellFormat.Alignment = StringAlignment.Near;ColumnWidth = columnsWidth[CurrentCell];RectangleF CellBounds = new RectangleF(CurrentX, currentY, ColumnWidth, rowsHeight[currentRow]);g.DrawString(dataGridView.Rows[currentRow].Cells[CurrentCell].EditedFormattedValue.ToString(), RowFont, RowForeBrush, CellBounds, CellFormat);if (dataGridView.CellBorderStyle != DataGridViewCellBorderStyle.None)g.DrawRectangle(TheLinePen, CurrentX, currentY, ColumnWidth, rowsHeight[currentRow]);CurrentX += ColumnWidth;}currentY += rowsHeight[currentRow];if ((int)currentY > (pageHeight - topMargin - bottomMargin)){currentRow++;return true;}}currentRow++;}currentRow = 0;mColumnPoint++;if (mColumnPoint == mColumnPoints.Count){mColumnPoint = 0;return false;}elsereturn true;}// the main grid printing methodpublic bool DrawDataGridView(Graphics g){try{Calculate(g);DrawHeader(g);bool bContinue = DrawRows(g);return bContinue;}catch (Exception ex){MessageBox.Show("ERROR: " + ex.Message.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);return false;}}
}

Winform中打印 dataGridView里的内容相关推荐

  1. .NET WinForm中给DataGridView自定义ToolTip并设置ToolTip的样式

    .NET WinForm中的DataGridView为程序开发提供了诸多的便利,我们不需要做许多额外的工作就可以获得一些基础功能,例如点击列标题排序.行选择功能.改变列宽和行宽,以及单元格内容的自动T ...

  2. Winform中给DataGridView添加多选框列并获取选中行的内容

    场景 使用NPOI导入Excel并赋值给DataTable,然后显示在DataGrdView上,并且添加多选框,然后获取选中行的内容. Winform中使用NPOI实现Excel导入并赋值给DataT ...

  3. js动态加载table,打印table里的内容以及解决打印后的问题

    <body><div><div style="text-align:center;margin:10px">姓名:<input type= ...

  4. WinForm中关于DataGridView控件的一些应用

    转载于新浪 美林居士 的博客:            blog.sina.com.cn/s/blog_797a56d20101daiw.html4 在.NET4.0中,以表格形式存储的数据通常是Dat ...

  5. asp.net中打印指定控件内容

    1.写一个PrintHelper类 using System; using System.Data; using System.Configuration; using System.Web; usi ...

  6. php fopen 清空文件内容,如何在c语言中清空文件里的内容?

    对一个文件用读写方式打开 fopen("...", "r+");首先读出文件里面的(9php.com)内容,处理完成后需要重新写入文件中.在重新写入的(9php ...

  7. [C#] winform中的DataGridView的列宽设置(自动调整列宽)

    找了很多都说DataGridView有一个属性AutoSizeColumnMode,他有很多枚举值: 1.AllCells 调整列宽,以适合该列中的所有单元格的内容,包括标题单元格.  2.AllCe ...

  8. datagridview固定列宽_[C#] winform中的DataGridView的列宽设置(自动调整列宽)

    1.AllCells 调整列宽,以适合该列中的所有单元格的内容,包括标题单元格. 2.AllCellsExceptHeader 调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格. 3.Col ...

  9. winform中的DataGridView的列宽设置(自动调整列宽)

    找了很多都说DataGridView有一个属性AutoSizeColumnMode,他有很多枚举值: 1.AllCells 调整列宽,以适合该列中的所有单元格的内容,包括标题单元格.   2.AllC ...

最新文章

  1. ***常用vbs脚本
  2. 【Java作业】实验二 货物进销管理系统(运行成功完整代码
  3. python适用范围_Python应用范围总结概览
  4. 关于dialog的一点东西
  5. minwindow java_java中setMinWindowLayout()是什么呀?
  6. 微课|《Python编程基础与案例集锦(中学版)》第4章例题讲解(2)
  7. python地图匹配_python通过BF算法实现关键词匹配的方法
  8. windows10 右键 manage 没反应
  9. 两个三维图像互信息python_两的解释|两的意思|汉典“两”字的基本解释
  10. win10怎么打开计算机树形,win10系统中显示树形目录文件夹的两种方法
  11. 【Python】利用摸鱼的时间,我写了一个三国杀开盒模拟器...
  12. win32 中GetLastError 关于code与信息
  13. python俄罗斯方块小游戏实验报告,童年的记忆——如何用python写一个俄罗斯方块小游戏!...
  14. 实用网站、软件、App分享(计算机专业)
  15. 三星通信研究院SAIT China Lab招聘研究员及实习生
  16. TextCNN模型详解
  17. 使用HttpParser类解析网页
  18. 防晒新时代,小红书美妆品牌营销趋势洞察
  19. OpenCV中HOG人检测以及Part Model latent SVM目标识别
  20. Jmeter压测输出可观报告--用表格察看结果(view results in table)输出excel格式

热门文章

  1. 将阴天欠曝发暗的照片后期调出小清新色调效果
  2. 千元级别的蓝牙耳机有哪些值得买?隔音效果好的降噪蓝牙耳机推荐
  3. 短视频如何赚钱 短视频自媒体实操经验分享+真实
  4. 大数据测试类型,学习步骤
  5. Redisson与SpringBoot整合
  6. Redisson PermitExpirableSemaphore 剖析
  7. 阿里重新定义本地生活,饿了么口碑合并
  8. PCB走线角度选择 — PCB Layout 跳坑指南
  9. Escape character is ‘^]‘
  10. win7彻底关闭windows更新