List of Exercises

How to Print a DataGridView in C# WinForms

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Print_Dialog_with_Preview
  public partial class Form1 : Form
    private PrintDocument printDocument1 = new PrintDocument();
    private string documentContents;
    public string stringToPrint;
    private PrintDialog printDialog1;
    public Form1()
      printDocument1.PrintPage +=
       new PrintPageEventHandler(printDocument1_PrintPage);
      printDialog1 = new PrintDialog();

    private void Print_Preview_Click(object sender, EventArgs e)
      stringToPrint = Data_Grid_to_String(dataGridView1, ',');
      printDocument1.DocumentName = stringToPrint;
      printPreviewDialog1.Document = printDocument1;
      ToolStripButton b = new ToolStripButton();
      b.Image = Properties.Resources.print1;
      b.DisplayStyle = ToolStripItemDisplayStyle.Image;
      b.Click += printPreview_PrintClick;
      ((ToolStrip)(printPreviewDialog1.Controls[1])).Items.Insert(0, b);


    private void printPreview_PrintClick(object sender, EventArgs e)
        DialogResult result = printDialog1.ShowDialog();
        // If the result is OK then print the document.
        if (result == DialogResult.OK)
          stringToPrint = printDocument1.DocumentName;
          printDocument1.PrinterSettings = printDialog1.PrinterSettings;
          MessageBox.Show("Is printed!");
      catch (Exception ex)
        MessageBox.Show(ex.Message, ToString());
    public static string Data_Grid_to_String(DataGridView dgv, char delimiter)
      StringBuilder sb = new StringBuilder();
      foreach (DataGridViewRow row in dgv.Rows)
        foreach (DataGridViewCell cell in row.Cells)
          sb.Append(" ");
        sb.Remove(sb.Length - 2, 2); // Removes the last delimiter
      return sb.ToString();

    void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
      int charactersOnPage = 0;
      int linesPerPage = 0;

      // Sets the value of charactersOnPage to the number of characters
      // of stringToPrint that will fit within the bounds of the page.
      e.Graphics.MeasureString(stringToPrint, this.Font,
        e.MarginBounds.Size, StringFormat.GenericTypographic,
        out charactersOnPage, out linesPerPage);

      // Draws the string within the bounds of the page.
      e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black,
      e.MarginBounds, StringFormat.GenericTypographic);

      // Remove the portion of the string that has been printed.
      stringToPrint = stringToPrint.Substring(charactersOnPage);

      // Check to see if more pages are to be printed.
      e.HasMorePages = (stringToPrint.Length > 0);

      // If there are no more pages, reset the string to be printed.
      if (!e.HasMorePages)
        stringToPrint = documentContents;


Download the project of Visual Studio 2013 in DropBox Download

How to Print a DataGridView in C# | Build a PrintPreviewDialog, PrintDialog in Winforms

Video Thumbnail