Ejemplo n.º 1
0
            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);
            //}
        }