private void _printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { //try //{ //Set the left margin int iLeftMargin = e.MarginBounds.Left; //Set the top margin int iTopMargin = e.MarginBounds.Top; //Whether more pages have to print or not bool bMorePagesToPrint = false; int iTmpWidth = 0; //For the first page to print set the cell width and header height if (bFirstPage) { foreach (DataGridViewColumn GridCol in gw.Columns) { iTmpWidth = (int)(Math.Floor((double)((double)GridCol.Width / (double)iTotalWidth * (double)iTotalWidth * ((double)e.MarginBounds.Width / (double)iTotalWidth)))); iHeaderHeight = (int)(e.Graphics.MeasureString(GridCol.HeaderText, GridCol.InheritedStyle.Font, iTmpWidth).Height) + 11; // Save width and height of headers arrColumnLefts.Add(iLeftMargin); arrColumnWidths.Add(iTmpWidth); iLeftMargin += iTmpWidth; } } //Loop till all the grid rows not get printed while (iRow <= gw.Rows.Count - 1) { DataGridViewRow GridRow = gw.Rows[iRow]; //Set the cell height iCellHeight = GridRow.Height + 5; int iCount = 0; //Check whether the current page settings allows more rows to print if (iTopMargin + iCellHeight >= e.MarginBounds.Height + e.MarginBounds.Top) { bNewPage = true; bFirstPage = false; bMorePagesToPrint = true; break; } else { if (bNewPage) { //Draw Header e.Graphics.DrawString(_ReportHeader, new Font(gw.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top - e.Graphics.MeasureString(_ReportHeader, new Font(gw.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13); String strDate = ""; //Draw Date e.Graphics.DrawString(strDate, new Font(gw.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(strDate, new Font(gw.Font, FontStyle.Bold), e.MarginBounds.Width).Width), e.MarginBounds.Top - e.Graphics.MeasureString(_ReportHeader, new Font(new Font(gw.Font, FontStyle.Bold), FontStyle.Bold), e.MarginBounds.Width).Height - 13); //Draw Columns iTopMargin = e.MarginBounds.Top; DataGridViewColumn[] _GridCol = new DataGridViewColumn[gw.Columns.Count]; int colcount = gw.Columns.Count - 1; //Convert ltr to rtl foreach (DataGridViewColumn GridCol in gw.Columns) { _GridCol[colcount--] = GridCol; } for (int i = (_GridCol.Count() - 1); i >= 0; i--) { e.Graphics.FillRectangle(new SolidBrush(Color.LightGray), new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); e.Graphics.DrawString(_GridCol[i].HeaderText, _GridCol[i].InheritedStyle.Font, new SolidBrush(_GridCol[i].InheritedStyle.ForeColor), new RectangleF((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight), strFormat); iCount++; } bNewPage = false; iTopMargin += iHeaderHeight; } iCount = 0; DataGridViewCell[] _GridCell = new DataGridViewCell[GridRow.Cells.Count]; int cellcount = GridRow.Cells.Count - 1; //Convert ltr to rtl foreach (DataGridViewCell Cel in GridRow.Cells) { _GridCell[cellcount--] = Cel; } //Draw Columns Contents for (int i = (_GridCell.Count() - 1); i >= 0; i--) { if (_GridCell[i].Value != null) { e.Graphics.DrawString(_GridCell[i].FormattedValue.ToString(), _GridCell[i].InheritedStyle.Font, new SolidBrush(_GridCell[i].InheritedStyle.ForeColor), new RectangleF((int)arrColumnLefts[iCount], (float)iTopMargin, (int)arrColumnWidths[iCount], (float)iCellHeight), strFormat); } //Drawing Cells Borders e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iCellHeight)); iCount++; } } iRow++; iTopMargin += iCellHeight; } //If more lines exist, print another page. if (bMorePagesToPrint) { e.HasMorePages = true; } else { e.HasMorePages = false; } //} //catch (Exception exc) //{ // MessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, // MessageBoxIcon.Error); //} }
private void _printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { //try //{ //Set the left margin int iLeftMargin = e.MarginBounds.Left; //Set the top margin int iTopMargin = e.MarginBounds.Top; //Whether more pages have to print or not bool bMorePagesToPrint = false; int iTmpWidth = 0; //For the first page to print set the cell width and header height if (bFirstPage) { foreach (DataGridViewColumn GridCol in gw.Columns) { iTmpWidth = ((int)(Math.Floor((double)((double)GridCol.Width / (double)iTotalWidth * (double)iTotalWidth * ((double)e.MarginBounds.Width / (double)iTotalWidth))))); iHeaderHeight = (int)(e.Graphics.MeasureString(GridCol.HeaderText, GridCol.InheritedStyle.Font, iTmpWidth).Height) + 60; // Save width and height of headers arrColumnLefts.Add(iLeftMargin); arrColumnWidths.Add(iTmpWidth); iLeftMargin += iTmpWidth; } } //Loop till all the grid rows not get printed while (iRow <= gw.Rows.Count - 1) { DataGridViewRow GridRow = gw.Rows[iRow]; //Set the cell height iCellHeight = GridRow.Height + 30; int iCount = 0; //Check whether the current page settings allows more rows to print if (iTopMargin + iCellHeight >= e.MarginBounds.Height + e.MarginBounds.Top) { bNewPage = true; bFirstPage = false; bMorePagesToPrint = true; break; } else { if (bNewPage) { //Draw Header e.Graphics.DrawString(_ReportHeader, new Font("Calibri Light", 20, FontStyle.Bold), new SolidBrush(Color.Black), e.MarginBounds.Left, e.MarginBounds.Top + 20 - e.Graphics.MeasureString(_ReportHeader, new Font(gw.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13); String strDate = DateTime.Now.ToString("dd-MMM-yy hh:mm tt"); //Draw Date e.Graphics.DrawString(strDate, new Font("Calibri Light", 12, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left - 20 + (e.MarginBounds.Width - e.Graphics.MeasureString(strDate, new Font(gw.Font, FontStyle.Bold), e.MarginBounds.Width).Width), e.MarginBounds.Top + 30 - e.Graphics.MeasureString(_ReportHeader, new Font(new Font(gw.Font, FontStyle.Bold), FontStyle.Bold), e.MarginBounds.Width).Height - 13); //Draw Columns iTopMargin = e.MarginBounds.Top + 30; DataGridViewColumn[] _GridCol = new DataGridViewColumn[gw.Columns.Count]; int colcount = 0; //Convert ltr to rtl foreach (DataGridViewColumn GridCol in gw.Columns) { _GridCol[colcount++] = GridCol; } for (int i = 0; i <= (_GridCol.Count() - 1); i++) { e.Graphics.FillRectangle(new SolidBrush(Color.Gainsboro), new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); e.Graphics.DrawString(_GridCol[i].HeaderText, new Font("Calibri Light", 12, FontStyle.Bold), new SolidBrush(Color.Black), new RectangleF((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight), strFormat); iCount++; } bNewPage = false; iTopMargin += iHeaderHeight; } iCount = 0; DataGridViewCell[] _GridCell = new DataGridViewCell[GridRow.Cells.Count]; int cellcount = 0; //Convert ltr to rtl foreach (DataGridViewCell Cel in GridRow.Cells) { _GridCell[cellcount++] = Cel; } //Draw Columns Contents for (int i = 0; i <= (_GridCell.Count() - 1); i++) { if (_GridCell[i].Value != null) { if (_GridCell[i].GetType() != typeof(DataGridViewImageCell)) { e.Graphics.DrawString(_GridCell[i].FormattedValue.ToString(), new Font("Calibri Light", 10), new SolidBrush(Color.Black), new RectangleF((int)arrColumnLefts[iCount], (float)iTopMargin, (int)arrColumnWidths[iCount], (float)iCellHeight), strFormat); } else { Image img = Common.byteArrayToImage((byte[])_GridCell[i].Value); Rectangle m = new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iCellHeight); if ((double)img.Width / (double)img.Height > (double)m.Width / (double)m.Height) // image is wider { m.Height = (int)((double)img.Height / (double)img.Width * (double)m.Width); } else { m.Width = (int)((double)img.Width / (double)img.Height * (double)m.Height); } e.Graphics.DrawImage(img, m); } } //Drawing Cells Borders e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iCellHeight)); iCount++; } } iRow++; iTopMargin += iCellHeight; } //If more lines exist, print another page. if (bMorePagesToPrint) { e.HasMorePages = true; } else { e.HasMorePages = false; } //} //catch (Exception exc) //{ // KryptonMessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, // MessageBoxIcon.Error); //} }