Solved

Multiple pate PrintDocument with a DataTable

Posted on 2009-04-08
5
1,396 Views
Last Modified: 2012-05-06
I have a VERY simple report to develop and thought that developing it would be very simple.  Unfortunately just the opposite has turned out to be true because I am unfamiliar with the PrintDocument object.

I retrieve a DataReader from the database and Loop through the records.  Each record I want to add a line to the report.  With each line I add a specific about of space which actually prints well.  The problem is that the code prints on one page,each page on top of the other.  

BTW, I am always open to a BETTER way if the PrintDocument is not how I should be doing simple reports.

Thanks in advance,

db
Private Sub pdReport_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdReport.PrintPage
 

        'Get the data

        Dim cn As New OleDbConnection(ConfigurationManager.ConnectionStrings("TheConnection").ConnectionString)

        cn.Open()

        Dim cm As New OleDbCommand("Select Name,City,State from Suppliers", cn)

        cm.CommandType = CommandType.StoredProcedure

        Dim rdr As OleDbDataReader = cm.ExecuteReader

        'Set the starting vertical location for printing

        Dim y As Integer = 55

        'Loop through the records

        Do While rdr.Read

            'Print each column at the specific location

            e.Graphics.DrawString(rdr.Item("Name").ToString, printFont, Brushes.Black, 100, y + 15)

            e.Graphics.DrawString(rdr.Item("City").ToString, printFont, Brushes.Black, 250, y + 15)

            e.Graphics.DrawString(rdr.Item("State").ToString, printFont, Brushes.Black, 425, y + 15)

            'Increment y so the next line will print after the current line

            y += 15

            'Evaluate y to see if a new page is needed

            If y >= 1000 Then

                e.HasMorePages = True

                'Reset where y starts 

                y = 55

            End If

        Loop

        'No more records end the document

        e.HasMorePages = False

End Sub

Open in new window

0
Comment
Question by:dbote
  • 2
  • 2
5 Comments
 
LVL 96

Accepted Solution

by:
Bob Learned earned 250 total points
ID: 24103090
The PrintPage event is called for each page of the PrintDocument.  You can't have local instances of counter variables, data readers, etc.  They need to be defined outside, at the module-level.
0
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 24105294
>BTW, I am always open to a BETTER way if the PrintDocument is not how I should be doing simple reports.

If reports is what you are doing then why not use the Crystal Reports which come built in with the .NET?
0
 
LVL 1

Author Comment

by:dbote
ID: 24106287
I'm guessing that you are suggesting the ReportViewer control?
0
 
LVL 83

Assisted Solution

by:CodeCruiser
CodeCruiser earned 250 total points
ID: 24106357
The ReportViewer control displays reports but first you would need to design them.
Some links

http://www.codeproject.com/KB/cs/Crystal_Report.aspx
http://www.vbdotnetheaven.com/Articles/ArticleListing.aspx?SectionID=2&SubSectionID=105
0
 
LVL 1

Author Closing Comment

by:dbote
ID: 31567950
I appreciate the help, thank you.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

If you're writing a .NET application to connect to an Access .mdb database and use pre-existing queries that require parameters, you've come to the right place! Let's say the pre-existing query(qryCust) in Access takes a Date as a parameter and l…
Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

759 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now