2014-01-26 29 views
0

我试图建立一个像PrintDocument的发票,有没有什么办法可以得到我的“Totaal”行,这是在我打印的dataGridView下名为“Totaalregel”的文本框中的总和?有没有办法在PrintDocument的dataGridView下放一个总行?

private void printDocument1_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 dataGridView2.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 headres 
       arrColumnLefts.Add(iLeftMargin); 
       arrColumnWidths.Add(iTmpWidth); 
       iLeftMargin += iTmpWidth; 
      } 
     } 

     //Loop till all the grid rows not get printed 
     while (iRow <= dataGridView2.Rows.Count - 1) 
     { 
      DataGridViewRow GridRow = dataGridView2.Rows[iRow]; 
      //Set the cell height 
      iCellHeight = GridRow.Height + 5; 
      int iCount = 0; 
      //Check whether the current page settings allo 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("Factuur", new Font(dataGridView2.Font, FontStyle.Bold), 
          Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top - 
          e.Graphics.MeasureString("Factuur", new Font(dataGridView2.Font, 
          FontStyle.Bold), e.MarginBounds.Width).Height - 13); 

        String strDate = DateTime.Now.ToLongDateString() + " " + 
            DateTime.Now.ToShortTimeString(); 

        //Draw Date 
        e.Graphics.DrawString(strDate, new Font(dataGridView2.Font, FontStyle.Bold), 
          Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - 
          e.Graphics.MeasureString(strDate, new Font(dataGridView1.Font, 
          FontStyle.Bold), e.MarginBounds.Width).Width), e.MarginBounds.Top - 
          e.Graphics.MeasureString("Factuur", new Font(new 
           Font(dataGridView2.Font, 
           FontStyle.Bold), 
          FontStyle.Bold), e.MarginBounds.Width).Height - 13); 

        //Draw Columns     
        iTopMargin = e.MarginBounds.Top; 
        foreach (DataGridViewColumn GridCol in dataGridView2.Columns) 
        { 
         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.HeaderText, GridCol.InheritedStyle.Font, 
          new SolidBrush(GridCol.InheritedStyle.ForeColor), 
          new RectangleF((int)arrColumnLefts[iCount], iTopMargin, 
          (int)arrColumnWidths[iCount], iHeaderHeight), strFormat); 
         iCount++; 
        } 
        bNewPage = false; 
        iTopMargin += iHeaderHeight; 
       } 
       iCount = 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)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); 
    } 
} 

这里是我要找的想法:

example

+0

好吧,当然,这只是另一个Graphics.DrawString()调用。因为你写了上帝的方法,所以很难弄清楚它应该放在哪里。拆分它。 –

回答

0

你可以只把你共行作为一个DataGridView项目在底部,如果你的代码是生产整个的DataGridView到您的打印那么它也应该检索总行。

或者您可以将它放在代码的末尾,因此一旦e.HasManyPages被声明为false之前,您可以使用e.Graphics打印代码段来生成所需的字符串。如果总数只是文本框中的字符串,那么您将在您的打印中调用该字符串。

相关问题