try this
Private Function PrintDataGrid(ByVal g As Graphics) As Boolean
Dim sf As StringFormat = New StringFormat
PageCounter = PageCounter + 1
If (bRightToLeft) Then
CurrentX = PrintDoc.DefaultPageSettings.PaperSize.Width_
- PrintDoc.DefaultPageSettings.Margins.Right
sf.FormatFlags = StringFormatFlags.DirectionRightToLeft
Else
CurrentX = PrintDoc.DefaultPageSettings.Margins.Left
End If
Dim i As Integer
For i = CurrentRow To PrintGrid.Rows - 1
Dim j As Integer
For j = 0 To PrintGrid.Columns - 1
Select Case (PrintGrid.Cell(i, j).Alignment)
Case HorizontalAlignment.Left
sf.Alignment = StringAlignment.Near
Case HorizontalAlignment.Center
sf.Alignment = StringAlignment.Center
Case HorizontalAlignment.Right
sf.Alignment = StringAlignment.Far
End Select
If (bRightToLeft) Then
g.FillRectangle(New SolidBrush(PrintGrid.BackColor), _
CurrentX - PrintGrid.Cell(i, j).Width, CurrentY, _
PrintGrid.Cell(i, j).Width, PrintGrid.Cell(i, j).Height)
g.DrawRectangle(New Pen(PrintGrid.LineColor), _
CurrentX - PrintGrid.Cell(i, j).Width, CurrentY, _
PrintGrid.Cell(i, j).Width, PrintGrid.Cell(i, j).Height)
g.DrawString(PrintGrid.Cell(i, j).CText, _
PrintGrid.Cell(i, j).Font, New SolidBrush(PrintGrid.ForeColor),_
New RectangleF(CurrentX - PrintGrid.Cell(i, j).Width, _
CurrentY, PrintGrid.Cell(i, j).Width, _
PrintGrid.Cell(i, j).Height), sf)
CurrentX -= PrintGrid.Cell(i, j).Width
Else
g.FillRectangle(New SolidBrush(PrintGrid.BackColor), _
CurrentX, CurrentY, PrintGrid.Cell(i, j).Width, _
PrintGrid.Cell(i, j).Height)
g.DrawRectangle(New Pen(PrintGrid.LineColor), CurrentX, _
CurrentY, PrintGrid.Cell(i, j).Width, _
PrintGrid.Cell(i, j).Height)
g.DrawString(PrintGrid.Cell(i, j).CText, _
PrintGrid.Cell(i, j).Font, New SolidBrush(PrintGrid.ForeColor),_
New RectangleF(CurrentX, CurrentY, _
PrintGrid.Cell(i, j).Width, PrintGrid.Cell(i, j).Height), sf)
CurrentX += PrintGrid.Cell(i, j).Width
End If
Next
If (bRightToLeft) Then
CurrentX = PrintDoc.DefaultPageSettings.PaperSize.Width_
- PrintDoc.DefaultPageSettings.Margins.Right
Else
CurrentX = PrintDoc.DefaultPageSettings.Margins.Left
End If
CurrentY += PrintGrid.Cell(i, 0).Height
CurrentRow += 1
If (CurrentY > PrintDoc.DefaultPageSettings.PaperSize.Height_
- PrintDoc.DefaultPageSettings.Margins.Bottom) Then
Return True
End If
Next
Return False
End Function
http://www.codeproject.com/KB/printing/DataGrid_Printing_Class.aspx