Home > DeveloperSection > Forums > Add datagridview printing in C#
Mark Devid
Mark Devid

Total Post:102

Points:714
Posted on    June-15-2013 4:38 AM

 C# C# 
Ratings:


 2 Reply(s)
 1480  View(s)
Rate this:
HI Experts,

How can I add printing option in a datagridview using C#.



Sumit Kesarwani

Total Post:378

Points:2694
Posted on    June-15-2013 7:46 AM

Hi Mark,

You can use this code:

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);

        }

 

   private void button1_Click(object sender, EventArgs e)

        {

            printDocument1.Print();

        }


Manmohan Jha

Total Post:35

Points:245
Posted on    July-24-2013 3:58 AM

Hello Mark,

You can use this code:


 PrintDocument pd = new PrintDocument();
 public Form1()
 {
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
}
  private void pd_PrintPage(object sender, PrintPageEventArgs e)
        {
            int LeftMargin = e.MarginBounds.Left;
                bool MorePagesToPrint = false;
                int TmpWidth = 0;
                TopMargin = e.MarginBounds.Top;                

                if (FirstPage)
                {                   
                    foreach (DataGridViewColumn GridCol in dgvshow.Columns)
                    {

                        TmpWidth = (int)(Math.Floor((double)((double)GridCol.Width / (double)TotalWidth * (double)TotalWidth *
                                       ((double)e.MarginBounds.Width / (double)TotalWidth))));

                        HeaderHeight = (int)(e.Graphics.MeasureString(GridCol.HeaderText,
                                    GridCol.InheritedStyle.Font, TmpWidth).Height) + 11;

                        AColumnLefts.Add(LeftMargin);
                        AColumnWidths.Add(TmpWidth);
                        LeftMargin += TmpWidth;
                    }
                }
                //MessageBox.Show(dgvshow.Rows.Count.ToString());
                while (Row < dgvshow.Rows.Count)
                {
                    //MessageBox.Show("Ok");
                    DataGridViewRow GridRow = dgvshow.Rows[Row];
                    CellHeight = GridRow.Height + 5;
                    int Count = 0;
                    //Check whether the current page settings allo more rows to print
                    if (TopMargin + CellHeight >= e.MarginBounds.Height + e.MarginBounds.Top)
                    {
                        NewPage = true;
                        FirstPage = false;
                        MorePagesToPrint = true;
                        break;
                    }
                    else
                    {
                        if (NewPage)
                        {

                            foreach (DataGridViewColumn GridCol in dgvshow.Columns)
                            {
                                e.Graphics.FillRectangle(new SolidBrush(Color.LightGray),
                                    new Rectangle((int)AColumnLefts[Count], TopMargin,
                                    (int)AColumnWidths[Count], HeaderHeight));

                                e.Graphics.DrawRectangle(Pens.Black,
                                    new Rectangle((int)AColumnLefts[Count], TopMargin, (int)AColumnWidths[Count], HeaderHeight));

                                e.Graphics.DrawString(GridCol.HeaderText, GridCol.InheritedStyle.Font,
                                    new SolidBrush(GridCol.InheritedStyle.ForeColor),
                                    new RectangleF((int)AColumnLefts[Count], TopMargin,
                                    (int)AColumnWidths[Count], HeaderHeight), strFormat);
                                Count++;
                            }
                            NewPage = false;
                            TopMargin += HeaderHeight;
                        }
                        Count = 0;
                        //Draw Columns Contents   

                        foreach (DataGridViewCell Cel in GridRow.Cells)
                        {
                            if (Cel.Value != null)
                            {
                                e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font,
                                            new SolidBrush(Cel.InheritedStyle.ForeColor),
                                            new RectangleF((int)AColumnLefts[Count], (float)TopMargin,
                                            (int)AColumnWidths[Count], (float)CellHeight), strFormat);
                            }
                            //Drawing Cells Borders 
                            e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)AColumnLefts[Count], TopMargin, (int)AColumnWidths[Count], CellHeight));

                            Count++;
                        }
                    }
                    Row++;
                    TopMargin += CellHeight;
                }

                //If more lines exist, print another page.
                if (MorePagesToPrint)
                    e.HasMorePages = true;
                else
                    e.HasMorePages = false;           
        }



private void btnprint_Click(object sender, EventArgs e)
 {
    PrintDialog printDialog = new PrintDialog();
    printDialog.Document = pd;
    printDialog.UseEXDialog = true;

      if (DialogResult.OK == printDialog.ShowDialog())
     {                       
      pd.DocumentName = "Page Title";
                        pd.Print();
    }
}

Mj

Don't want to miss updates? Please click the below button!

Follow MindStick