Jul 26, 2012
3107.DGV Print in VB2008.zip For some time I have looked ways of using a datagridview to create an invoice and print it on paper. I know that I am not the only one who wants to do this. I have seen many requests for help over the years but no solutions. The creation of the invoice in VB was relatively easy but printing it to paper presented a huge challenge. What I am presenting here is a cut down version of an invoice program to illustrate the printing of a datagrisview rather than the whole invoice project.Printing a datagridview is hard work. There is no luxury of WYSIWYG.There have been a few items on the various VB help web sites on how to print a datagridview but I, as a novice programmer, had difficulty following the code. The last one that I found and could use is:
View 12 Replies
I would suggest you download the project from this site and take a look at it as I removed much of the code that did not apply to what I wanted in my invoice. Please also note that this Code Project download prints the contents of a database and you cannot modify the DGV contents. I have made a slight modification to the print code to cater for blank or empty cells. If this is not done, the print stops at the first empty cell in the datagridview even if there is more data further down the grid - a very real situation in an invoice where lines could be left blank for clarity.
There are a few other points worth noting. FormMain is the form containing the invoice layout and is the project start form. This is done deliberately as the print sequence needs to use Form1. I have not yet found out why. Some of the buttons, tick boxes and radio buttons on the PrintOptions form do not work and are not required for this demonstration. The PrintDGV code is based on the original Code Project download. I needed a starting point and the code has been extensively modified to meet the invoice layout requirements. To save time during developing the print code, I hard coded the invoice number and customer name and address text boxes on FormMain. This information was inserted in the properties window under "Text" for the text boxes. I also hard coded the name and address of the business initiating the invoice in the PrintDGV code. I have yet to find a way of giving the end user the opportunity to create their own company name and address on another form and have it automatically inserted in the print code.
Besides just being able to print a datagridview, I have looked at what each part of the code does and I have made comments in the hope that it will make it easier for the reader to understand and learn. Although my invoice is designed to be only one page long, I have left the code at the end of the print sequence to show how multiple pages can be used.
To understand what I have done, I suggest you download the zipped file, unzip it to a folder of your choice and run it. You will see a datagridview with 16 rows of text and numbers representing goods sold. (These have been hard coded in the MainForm_Load sub routine. Removing or commenting out some of this data will leave blank cells in the DGV but the whole thing will still print.) Press the "Print" button to show the "Print Options" form. Leave all the controls in their default state and click "OK". This will take you to the "Print Preview" form where you can see what will be printed. If you want to actually use paper and ink, press the printer icon on the "Print Preview" page. The 3 check boxes in the checkedlistbox on the "Print Options" form allows you to remove columns from the printed form. I will be using this facility in the finished product as some of the new columns in the DGV will be for internal use and calculating the totals only. No totals have been shown at the bottom of the invoice to keep the demonstration as simple as possible.A future project will show how to print an invoice using a database for the items sold - a more practical application. There are some differences in the code in FormMain - mainly how to set the form to take 16 line items even if only 2 or 3 lines are used.