在C#win中在datagrid视图中打印所有行 [英] print all row in datagrid View in C# win

查看:40
本文介绍了在C#win中在datagrid视图中打印所有行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的朋友

我有一个数据gridview并在其上插入约50条记录.但是当我使用下面的代码打印此gridview时,它仅打印形式可见的记录,但是在grid视图上有滚动并且有更多记录.

我正在使用的代码:

Dear friends

I have a data gridview and insert around 50 records on it. but when i am printing this gridview useing the fllowing code it is only printing only the the record which are visile in form but there is a scrol on grid view and have more record.

code which i m using :

e.Graphics.DrawImage(Image.FromFile("d:\\logo.bmp"), 10, 50);
            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, 150, 400);


请帮助我以C#窗口形式从gridview打印所有记录..

在此先谢谢您..


Please help me to print all the record from gridview in C# window form..

thanks in advance..

推荐答案

关注此链接以解决您的问题
Printing-a-datagridview-in-C-NET-2- 0
通过选择列和行进行DataGridView打印

或使用此类

follow this link for your problem
Printing-a-datagridview-in-C-NET-2-0
DataGridView Printing by Selecting Columns and Rows

or use this class

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 DataGridViewX gw = new DataGridViewX();
      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 <= 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 = 0;
                      //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 = 0;
                  //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_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);
          }
      }

  }


这篇关于在C#win中在datagrid视图中打印所有行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆