Click to See Complete Forum and Search --> : VB.Net 2008 Print DataGridView (Text Wrap top header column and lock in width)


remya1000
01-31-2012, 03:14 PM
I’m using VB.Net 2008 application program.

I’m using DataGridView. I have a Print option where i need to print the DataGridView.

I’m using this code for Printing and for Print Preview.


Dim MyDataGridViewPrinter As DataGridViewPrinter


Private Function SetupThePrinting() As Boolean
Dim MyPrintDialog As PrintDialog = New PrintDialog()

MyPrintDialog.AllowCurrentPage = False
MyPrintDialog.AllowPrintToFile = False
MyPrintDialog.AllowSelection = False
MyPrintDialog.AllowSomePages = True
MyPrintDialog.PrintToFile = False
MyPrintDialog.ShowHelp = False
MyPrintDialog.ShowNetwork = False

PrintDocument1.PrinterSettings = MyPrintDialog.PrinterSettings
PrintDocument1.DefaultPageSettings.Margins = New Margins(10, 10, 10, 10)

MyDataGridViewPrinter = New DataGridViewPrinter(DataGridView1, PrintDocument1, False, True, "Price Manager", New Font("Tahoma", 18, FontStyle.Bold, GraphicsUnit.Point), Color.Black, True)

Return True
End Function

Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim more As Boolean

Try
more = MyDataGridViewPrinter.DrawDataGridView(e.Graphics)
If more Then e.HasMorePages = True
Catch Ex As Exception
End Try
End Sub

' The Print Preview Button
Private Sub btnPrintPreview_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrintPreview.Click
If SetupThePrinting() Then
Dim MyPrintPreviewDialog As PrintPreviewDialog = New PrintPreviewDialog()
MyPrintPreviewDialog.Document = PrintDocument1
MyPrintPreviewDialog.ShowDialog()
End If
End Sub

' The Print Button
Private Sub btnPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrint.Click
If SetupThePrinting() Then PrintDocument1.Print()
End Sub


Attached the class i'm using for print.

I have 10 fields showing in datagridview. As the last 5 columns header is long, the datagridview is not fitting inside 1 page (not showing all 10 fields in one single page). But is there a way i can "Text Wrap" the top header column and lock in the width, then it should print across one page perfectly.

I searched a lot, but I couldn’t find it.

If you know how i can "Text Wrap" the top header column and lock in the width to print across one page, please help me. If you can provide an example, that will be so helpful.

Thanks in advance.

ssystems
02-02-2012, 12:08 AM
Would http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/3d15f958-ebb3-40be-b1ee-a0f2f7a8bc1a help?

remya1000
02-13-2012, 10:54 PM
Thanks ssystems for your help.

i tried as you mentioned. but header start showing correctly, but all the rows are still showing in old way...

Is there a way i can print this in Landscape format, so entire columns will be fit in one page?

this is the code used in class for checking Landscape. but when i try both, it shows same page format.


'Claculating the PageWidth and the PageHeight.
If Not ThePrintDocument.DefaultPageSettings.Landscape Then
PageHeight = ThePrintDocument.DefaultPageSettings.PaperSize.Width
PageWidth = ThePrintDocument.DefaultPageSettings.PaperSize.Height
Else
PageWidth = ThePrintDocument.DefaultPageSettings.PaperSize.Width
PageHeight = ThePrintDocument.DefaultPageSettings.PaperSize.Height
End If


Is it possible? If you know how to print this in Landscape format, please help me. if you can provide an example, that will be so helpful.

Thanks in advance.

ssystems
02-14-2012, 07:50 AM
There is a PageSettings property on the document object. Set Landscape as true. However if you still want it as a portrait. Set the width wrap property of the column items to true