最近评论问题比较多,这是几年前得代码了,今天正好有时间我重新整理了下代码把源码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;}}
}










![[附源码]java毕业设计网易云音乐推荐系统](https://img-blog.csdnimg.cn/bdbea73a6ac845e0b08655f5676a7f7d.png)







