Print Dari Datagridview dengan vb.net

Kebetulan lagi garap project kecil, jd tidak butuh report yg rumit dan besar, cukup menggunakan filtering pada datagridview dan hasilnya diprint jd tidak usah menggunakan crystalreport lagi, setelah berkeliling diforum  berikut adalah kode yang menurut saya paling simpel dan mudah digunakan hanya membutuhkan komponen bawaan VB.NET saja (PrintDocument dan PrintPreviewDialog), berikut Source code nya :

Dim mRow As Integer = 0
Dim newpage As Boolean = True
Private Sub PrintDocument1_PrintPage_1(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        With DataGridView1
            Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit)
            fmt.LineAlignment = StringAlignment.Center
            fmt.Trimming = StringTrimming.EllipsisCharacter
            Dim y As Single = e.MarginBounds.Top
            Do While mRow < .RowCount
                Dim row As DataGridViewRow = .Rows(mRow)
                Dim x As Single = e.MarginBounds.Left
                Dim h As Single = 0
                For Each cell As DataGridViewCell In row.Cells
                    Dim rc As RectangleF = New RectangleF(x, y, cell.Size.Width, cell.Size.Height)
                    e.Graphics.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height)
                    If (newpage) Then
                        e.Graphics.DrawString(DataGridView1.Columns(cell.ColumnIndex).HeaderText, .Font, Brushes.Black, rc, fmt)
                    Else
                        e.Graphics.DrawString(DataGridView1.Rows(cell.RowIndex).Cells(cell.ColumnIndex).FormattedValue.ToString(), .Font, Brushes.Black, rc, fmt)
                    End If
                    x += rc.Width
                    h = Math.Max(h, rc.Height)
                Next
                newpage = False
                y += h
                mRow += 1
                If y + h > e.MarginBounds.Bottom Then
                    e.HasMorePages = True
                    mRow -= 1
                    newpage = True
                    Exit Sub
                End If
            Loop
            mRow = 0
        End With
    End Sub
Berikut kode untuk tombol print nya :
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        PrintPreviewDialog1.Document = PrintDocument1
        PrintPreviewDialog1.ShowDialog()
    End Sub
Semoga Bermanfaat :)

7 comments:

  1. oke gan sippp

    ReplyDelete
  2. PrintDocument dan PrintPreviewDialog itu ngambil drimana ya gan?

    ReplyDelete
  3. Bisa gan, tapi untuk mendesignnya gimana ya?

    ReplyDelete
  4. header kolom gak tercetak di halaman pertama. gimana tuh gan?

    ReplyDelete
  5. bang tampilannya terpotong ga full gimana bang?
    kalo ubah ke landscape gimana ya?

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete