Click here to Skip to main content
13,353,706 members (55,590 online)
Click here to Skip to main content
Add your own
alternative version


80 bookmarked
Posted 19 Sep 2005

Printable ListView

, 19 Sep 2005
Rate this:
Please Sign up or sign in to vote.
A customized ListView control with printing capability.

Demo application

List Print Preview


Some time during my development works I had the need of printing the contents of a ListView control. So I wrote down the code for a custom control, named PrintableListView, that solved the following two problems:

  • extend the print on multiple pages when the width of the list exceeds the width of the print page,
  • shrink, optionally, the list in a way that the resulting width fits on a single page.

Using the code

PrintableListView control is derived from System.Windows.Forms.ListView, so use it like the native ListView control. The additional functionalities are those for print and for print preview.

// call the print method for displaying the standard print dialog.

// call the print preview method for displaying
// the standard print preview dialog

To turn on the “Fit to page” option, use the FitToPage property of the control.

this.m_list.FitToPage = true;

To set the title that appears on the page header, use the Title property of the control.

Points of Interest

If you think about the ListView control, you will note that we have all the information we need to print it in the simplest way. We have the columns width, the fonts, the rows height and so on. All we have to do is to get all these information and play a little with the Graphics instance that represents the printing surface. What follows is the way I solved the problems listed in the Introduction.

Multi page print

This is quite simple. When we are printing the current column of a row, we check whether there is enough room to print it. If not, we mark that column as the first one for the next page. That’s it.

Fit to page

This point is just a little bit more complex compared to the previous one. If the total width of the list is greater than the width of the available space, we have to calculate a scaling factor, given by the list width divided by the available space. For simplicity, in my implementation, I converted all the measures in units of hundredths of an inch. To set the scale factor and unit of measure is sufficient to change the coordinate system of the Graphics object passed to the handler of the PrintPage event of the PrintDocument object.

private void OnPrintPage(object sender, PrintPageEventArgs e)
    if (m_nStartCol==0 && m_bFitToPage && m_fListWidth>rectBody.Width)
        // Calculate scale factor
        fScale = rectBody.Width / m_fListWidth;
    // Setting scale factor and unit of measure
    g.ScaleTransform(fScale, fScale);
    g.PageUnit = GraphicsUnit.Inch;
    g.PageScale = 0.01f;


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Matteo D'Avena
Web Developer
Italy Italy
I am from Apricena, a small town in Puglia, Italy. I graduated at the University of Bari in 1998 in Computer Science. I worked for seven years in the field of business intelligence with one of the most important italian group producing software and services for the banking and financial sector.

For four year I had been a freelance software developer and consultant.

Now I am the leading project manager for!

Thanks very much.

You may also be interested in...

Comments and Discussions

GeneralMy vote of 5 Pin
jcarter12121211-Oct-10 13:21
memberjcarter12121211-Oct-10 13:21 
GeneralMy vote of 5 Pin
Don_Hard11-Jul-10 3:36
memberDon_Hard11-Jul-10 3:36 
GeneralGood Article Pin
gary_gsv15-Jun-10 18:46
membergary_gsv15-Jun-10 18:46 
GeneralAnd with checkboxes Pin
Adrian20993-Mar-10 8:48
memberAdrian20993-Mar-10 8:48 
GeneralImages in ListView Print Preview Pin
hellbinder5-Nov-09 8:49
memberhellbinder5-Nov-09 8:49 
GeneralPrinting a ListView that contains groups Pin
Mark F.23-Mar-09 10:32
memberMark F.23-Mar-09 10:32 
QuestionWhat's the license associated with your code? Pin
Zaki Saadeh27-May-08 7:24
memberZaki Saadeh27-May-08 7:24 
Questionhow i can bind treeview With My Table in Database Pin
waleedmaklad9-Dec-07 10:35
memberwaleedmaklad9-Dec-07 10:35 
hi how i can bind treeview With My Table in Database?
Questionhow can i bind my table with treeview In C# Pin
waleed9-Dec-07 10:32
susswaleed9-Dec-07 10:32 
Questionhow to select printer? Pin
Suha18-Nov-07 13:32
memberSuha18-Nov-07 13:32 
QuestionRight-to-left Pin
SohailB17-Nov-07 3:28
memberSohailB17-Nov-07 3:28 
GeneralThanks, but Pin
bart_net_master20-Aug-07 4:17
memberbart_net_master20-Aug-07 4:17 
General Pin 11:29
suss 11:29 
GeneralGreat article...Thanks... Pin
Abhishek_Gajab14-Aug-07 3:42
memberAbhishek_Gajab14-Aug-07 3:42 
GeneralInvalidArgument=Value of '1' is not valid for 'index'. Pin
Jordan Marrazzo4-Jul-07 18:59
memberJordan Marrazzo4-Jul-07 18:59 
GeneralRe: InvalidArgument=Value of '1' is not valid for 'index'. Pin
Jordan Marrazzo4-Jul-07 19:33
memberJordan Marrazzo4-Jul-07 19:33 
QuestionHow to print selected pages using this Printable ListView control Pin
durgamic10-Apr-07 2:08
memberdurgamic10-Apr-07 2:08 
QuestionHow can i select required pages Pin
durgamic10-Apr-07 2:05
memberdurgamic10-Apr-07 2:05 
QuestionPrint 2 listviews on same page [modified] Pin
csfong3314-Mar-07 19:10
membercsfong3314-Mar-07 19:10 
GeneralListview print Pin
Georgiio7-Jan-07 11:20
memberGeorgiio7-Jan-07 11:20 
GeneralPrinting with diffent dongs Pin
enlikil27-Oct-06 6:44
memberenlikil27-Oct-06 6:44 
GeneralAbout language Pin
jabulino19-Mar-06 21:44
memberjabulino19-Mar-06 21:44 
QuestionColumn order Pin
Colin Parker11-Oct-05 2:07
memberColin Parker11-Oct-05 2:07 
AnswerRe: Column order Pin
Mircea Puiu11-Oct-05 2:43
memberMircea Puiu11-Oct-05 2:43 
GeneralRe: Column order Pin
Colin Parker11-Oct-05 2:54
memberColin Parker11-Oct-05 2:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.180111.1 | Last Updated 19 Sep 2005
Article Copyright 2005 by Matteo D'Avena
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid