hey there guys. I want to know how to Print the data from a listview into a receipt. I have found a question here which solves the printing but it only prints the listview items and not the other texts from the Receipt Form. Like the Header and total amounts and the like.
Click Here
is there any way to edit this and also print the other texts.

Recommended Answers

All 4 Replies

Did you ever tried writing the code you want because you now have the code to print Items (Body) so why don't before the Body printing code write your header printing code, or simply formulate/format it then add the format above the body so that it will be printed on top followed by the Items(Body) and footer(Total)?

yes i did. and am now able to print but now I'm stuck again in a problem. which is the table in the rdlc report doesn't update at all if another data is added on the database the table on the rdlc report doesn't update.

Any code we could look at?

hi Mr. M. Sorry for the late reply I had to go to class.

I saw this code on some site and have been using it.

Public Class frmPrinting

    Private Sub frmPrinting_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Private Sub ButtonPrintListView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        'The below is desined for details view.
        If frmPOS.ListView1.View = View.Details Then
            PrintDetails(e)
        End If
    End Sub

    Private Sub PrintDetails(ByRef e As System.Drawing.Printing.PrintPageEventArgs)
        Static LastIndex As Integer = 0
        Static CurrentPage As Integer = 0

        'Getting the current dpi so the textleftpad 
        'will be the same on a different dpi than 
        'the 96 i'm using.  Won't make much of a difference though.
        Dim DpiGraphics As Graphics = Me.CreateGraphics
        Dim DpiX As Integer = DpiGraphics.DpiX
        Dim DpiY As Integer = DpiGraphics.DpiY

        DpiGraphics.Dispose()

        Dim X, Y As Integer
        Dim ImageWidth As Integer
        Dim TextRect As Rectangle = Rectangle.Empty
        Dim TextLeftPad As Single = CSng(4 * (DpiX / 96)) '4 pixel pad on the left.
        Dim ColumnHeaderHeight As Single = CSng(frmPOS.ListView1.Font.Height + (10 * (DpiX / 96))) '5 pixel pad on the top an bottom
        Dim StringFormat As New StringFormat
        Dim PageNumberWidth As Single = e.Graphics.MeasureString(CStr(CurrentPage), frmPOS.ListView1.Font).Width

        'Specify the text should be drawn in the center of the line and
        'that the text should not be wrapped and the text should show
        'ellipsis would cut off.
        StringFormat.FormatFlags = StringFormatFlags.NoWrap
        StringFormat.Trimming = StringTrimming.EllipsisCharacter
        StringFormat.LineAlignment = StringAlignment.Center

        CurrentPage += 1

        'Start the x and  y at the top left margin.
        X = CInt(e.MarginBounds.X)
        Y = CInt(e.MarginBounds.Y)

        'Draw the column headers
        For ColumnIndex As Integer = 0 To frmPOS.ListView1.Columns.Count - 1
            TextRect.X = X
            TextRect.Y = Y
            TextRect.Width = frmPOS.ListView1.Columns(ColumnIndex).Width
            TextRect.Height = ColumnHeaderHeight

            e.Graphics.FillRectangle(Brushes.LightGray, TextRect)
            e.Graphics.DrawRectangle(Pens.DarkGray, TextRect)

            'TextLeftPad adds a little padding from the gridline.
            'Add it to the left and subtract it from the right.
            TextRect.X += TextLeftPad
            TextRect.Width -= TextLeftPad
            e.Graphics.DrawString(frmPOS.ListView1.Columns(ColumnIndex).Text, frmPOS.ListView1.Font, Brushes.Black, TextRect, StringFormat)

            'Move the x position over the width of the column width.
            'Since I subtracted some padding add the padding back
            'when offsetting.
            X += TextRect.Width + TextLeftPad
        Next

        'Just drew the headers.  Move the Y down the height
        'of the column headers.
        Y += ColumnHeaderHeight

        'Now draw the items.  If this is the first page then the 
        'last index will be zero.  If its not then the last index
        'will be the last index we tried to draw but had no room.
        For i = LastIndex To frmPOS.ListView1.Items.Count - 1

            With frmPOS.ListView1.Items(i)
                'Start the x at the pages left margin.
                X = CInt(e.MarginBounds.X)

                'Check for Last Line
                If Y + .Bounds.Height > e.MarginBounds.Bottom Then
                    'This item won't fit.
                    'subtract 1 from i so the next time this sub
                    'is entered we can start with this item.
                    LastIndex = i - 1
                    e.HasMorePages = True
                    StringFormat.Dispose()

                    'Draw the current page number before leaving.
                    e.Graphics.DrawString(CStr(CurrentPage), frmPOS.ListView1.Font, Brushes.Black, (e.PageBounds.Width - PageNumberWidth) / 2, e.PageBounds.Bottom - frmPOS.ListView1.Font.Height * 2)
                    Exit Sub
                End If

                'Print Images.
                'The image width is used so we can draw the gridline
                'around the image about to be drawn.  You'll see it 
                'below.
                ImageWidth = 0
                If frmPOS.ListView1.SmallImageList IsNot Nothing Then
                    'If the image key is set then draw the image
                    'with the key .  If not draw the image with the
                    'index.  A tiny bit of validation would be good.
                    If Not String.IsNullOrEmpty(.ImageKey) Then
                        e.Graphics.DrawImage(frmPOS.ListView1.SmallImageList.Images(.ImageKey), X, Y)
                    ElseIf .ImageIndex >= 0 Then
                        e.Graphics.DrawImage(frmPOS.ListView1.SmallImageList.Images(.ImageIndex), X, Y)
                    End If

                    ImageWidth = frmPOS.ListView1.SmallImageList.ImageSize.Width
                End If

                'Now draw the subitems.  using the columns count so the 
                'grid lines can be drawn.  If used the subitems count then
                'the table would not be full if some subitems where less
                'than others.
                For ColumnIndex As Integer = 0 To frmPOS.ListView1.Columns.Count - 1

                    TextRect.X = X
                    TextRect.Y = Y
                    TextRect.Width = frmPOS.ListView1.Columns(ColumnIndex).Width
                    TextRect.Height = .Bounds.Height

                    If frmPOS.ListView1.GridLines Then
                        e.Graphics.DrawRectangle(Pens.DarkGray, TextRect)
                    End If

                    'If an image is drawn then shift over the x to 
                    'accomadate its width. If this was shifted before
                    'now then the gridline with draw rect above would be
                    ' on the wrong side of the image.
                    If ColumnIndex = 0 Then TextRect.X += ImageWidth

                    'Add a little padding from the gridline.
                    TextRect.X += TextLeftPad
                    TextRect.Width -= TextLeftPad

                    If ColumnIndex < .SubItems.Count Then
                        'This item has at least the same number of
                        'subitems as the current column index.
                        e.Graphics.DrawString(.SubItems(ColumnIndex).Text, frmPOS.ListView1.Font, Brushes.Black, TextRect, StringFormat)
                    End If

                    'Shift the x of the width of this subitem.
                    'Add some padding to the left side of the text
                    'so need to add it back.
                    X += TextRect.Width + TextLeftPad
                Next

                'Set the next line
                Y += .Bounds.Height

            End With
        Next

        'Draw the final page number.
        e.Graphics.DrawString(CStr(CurrentPage), frmPOS.ListView1.Font, Brushes.Black, (e.PageBounds.Width - PageNumberWidth) / 2, e.PageBounds.Bottom - frmPOS.ListView1.Font.Height * 2)

        StringFormat.Dispose()
        LastIndex = 0
        CurrentPage = 0
    End Sub

    Private Sub ReportViewer1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

    Private Sub ButtonPrintListView_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrintListView.Click
        'Used printPreviewDialog instead of printdialog
        'to save paper while debugging.  When finished
        'swith out to PrintDialog.
        Dim PrintPreview As New PrintPreviewDialog
        PrintPreview.Document = PrintDocument1
        PrintPreview.ShowDialog()
    End Sub
End Class

I can't seem to find out how to put a header with images and a footer.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.