C# DataGridView Printing

The DataGridView control, designed specifically for Windows Forms, offers a comprehensive solution for efficiently displaying tabular data. This control not only possesses exceptional configurability and extensibility, but it also boasts a wide range of properties, methods, and events that facilitate the customization of its appearance and behavior. Regrettably, the DataGridView lacks a built-in printing functionality, necessitating an alternative approach to accomplish this task.

PrintDocument object

To overcome this limitation, a practical workaround involves integrating a PrintDocument object into the project and managing the PrintPage event, which is triggered whenever a new page is ready for printing. Within the PrintPage event, a Bitmap Object is created, allowing the DataGridView to be rendered onto it seamlessly. For the successful execution of this C# project, it is imperative to incorporate two buttons—one for loading data and the other for initiating the print command. Additionally, don't forget to include a PrintDocument control on your form to facilitate the printing process.


The following picture shows how to drag PrintDocument Object to your project.

Full Source C#
using System; using System.Data; using System.Windows.Forms; using System.Data.SqlClient; using System.Drawing; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string connectionString = "Data Source=.;Initial Catalog=pubs;Integrated Security=True"; string sql = "SELECT * FROM Authors"; SqlConnection connection = new SqlConnection(connectionString); SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection); DataSet ds = new DataSet(); connection.Open(); dataadapter.Fill(ds, "Author_table"); connection.Close(); dataGridView1.DataSource = ds; dataGridView1.DataMember = "Author_table"; } private void button2_Click(object sender, EventArgs e) { printDocument1.Print(); } private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { Bitmap bm = new Bitmap(this.dataGridView1.Width, this.dataGridView1.Height); dataGridView1.DrawToBitmap(bm, new Rectangle(0, 0, this.dataGridView1.Width, this.dataGridView1.Height)); e.Graphics.DrawImage(bm, 0, 0); } } }