Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I previously Test this class for Print data grid view content.Instead of using <code>Report.rdlc</code> try this code</p> <p>Add this class to your project:</p> <p><strong>Edited</strong></p> <pre><code> class ClsPrint { #region Variables int iCellHeight = 0; //Used to get/set the datagridview cell height int iTotalWidth = 0; // int iRow = 0;//Used as counter bool bFirstPage = false; //Used to check whether we are printing first page bool bNewPage = false;// Used to check whether we are printing a new page int iHeaderHeight = 0; //Used for the header height StringFormat strFormat; //Used to format the grid rows. ArrayList arrColumnLefts = new ArrayList();//Used to save left coordinates of columns ArrayList arrColumnWidths = new ArrayList();//Used to save column widths private PrintDocument _printDocument = new PrintDocument(); private DataGridView gw = new DataGridView(); private string _ReportHeader; #endregion public ClsPrint(DataGridView gridview, string ReportHeader) { _printDocument.PrintPage += new PrintPageEventHandler(_printDocument_PrintPage); _printDocument.BeginPrint += new PrintEventHandler(_printDocument_BeginPrint); gw = gridview; _ReportHeader = ReportHeader; } public void PrintForm() { ////Open the print dialog //PrintDialog printDialog = new PrintDialog(); //printDialog.Document = _printDocument; //printDialog.UseEXDialog = true; ////Get the document //if (DialogResult.OK == printDialog.ShowDialog()) //{ // _printDocument.DocumentName = "Test Page Print"; // _printDocument.Print(); //} //Open the print preview dialog PrintPreviewDialog objPPdialog = new PrintPreviewDialog(); objPPdialog.Document = _printDocument; objPPdialog.ShowDialog(); } 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 &lt;= 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 &gt;= 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 = 0; //Convert ltr to rtl foreach (DataGridViewColumn GridCol in gw.Columns) { _GridCol[colcount++] = GridCol; } for (int i = (_GridCol.Count() - 1); i &gt;= 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 = 0; //Convert ltr to rtl foreach (DataGridViewCell Cel in GridRow.Cells) { _GridCell[cellcount++] = Cel; } //Draw Columns Contents for (int i = (_GridCell.Count() - 1); i &gt;= 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_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e) { try { strFormat = new StringFormat(); strFormat.Alignment = StringAlignment.Center; strFormat.LineAlignment = StringAlignment.Center; strFormat.Trimming = StringTrimming.EllipsisCharacter; arrColumnLefts.Clear(); arrColumnWidths.Clear(); iCellHeight = 0; iRow = 0; bFirstPage = true; bNewPage = true; // Calculating Total Widths iTotalWidth = 0; foreach (DataGridViewColumn dgvGridCol in gw.Columns) { iTotalWidth += dgvGridCol.Width; } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } </code></pre> <p><strong>For using:</strong> this will show print dialog with grid view result</p> <pre><code> ClsPrint _ClsPrint = new ClsPrint(dataGridView1, "header doc text"); _ClsPrint.PrintForm(); </code></pre> <h2>Result</h2> <p><img src="https://i.stack.imgur.com/ZpZp4.png" alt="enter image description here"></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload