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 :)
Thanks Gan...
ReplyDeleteBermanfaat
oke gan sippp
ReplyDeletePrintDocument dan PrintPreviewDialog itu ngambil drimana ya gan?
ReplyDeleteBisa gan, tapi untuk mendesignnya gimana ya?
ReplyDeleteheader kolom gak tercetak di halaman pertama. gimana tuh gan?
ReplyDeletebang tampilannya terpotong ga full gimana bang?
ReplyDeletekalo ubah ke landscape gimana ya?
This comment has been removed by the author.
ReplyDelete