poilusduboux
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
27 oct. 2006 à 10:28
Bonjour à tous
je planne toujours
je dois présenter mon soft LUNDI...
voici mon code pour imprimer un Datagrid avec VB.net
Private oStringFormat
As StringFormat
Private oStringFormatComboBox
As StringFormat
Private oButton
As Button
Private oCheckbox
As CheckBox
Private oComboBox
As ComboBox
Private nTotalWidth
As Int16
Private nRowPos
As Int16
Private NewPage
As
Boolean
Private nPageNo
As Int16
Private Header
As
String =
"Liste des plans"
Private sUserName
As
String =
"MonSoft"
Private
Sub PrintDocument1_PrintPage(
ByVal sender
As System.Object,
ByVal e
As System.Drawing.Printing.PrintPageEventArgs)
Handles PrintDocument1.PrintPageoStringFormat New StringFormatoStringFormat.Alignment StringAlignment.Near
oStringFormat.LineAlignment = StringAlignment.Center
oStringFormat.Trimming = StringTrimming.EllipsisCharacter
'oStringFormatComboBox New StringFormatoStringFormatComboBox.LineAlignment StringAlignment.Center
oStringFormatComboBox.FormatFlags = StringFormatFlags.NoWrap
oStringFormatComboBox.Trimming = StringTrimming.EllipsisCharacter
oButton New ButtonoCheckbox
New CheckBoxoComboBox New ComboBoxnTotalWidth 0
For
Each oColumn
As DataGridViewColumn
In DataGridView1.ColumnsnTotalWidth += oColumn.Width
NextnPageNo = 1
NewPage TruenRowPos 0
Static oColumnLefts
As
New ArrayList
Static oColumnWidths
As
New ArrayList
Static oColumnTypes
As
New ArrayList
Static nHeight
As Int16
Dim nWidth, i, nRowsPerPage
As Int16
Dim nTop
As Int16 = e.MarginBounds.Top
Dim nLeft
As Int16 = e.MarginBounds.Left
If nPageNo = 1
Then
For
Each oColumn
As DataGridViewColumn In DataGridView1.ColumnsnWidth CType(Math.Floor(oColumn.Width / nTotalWidth * nTotalWidth * (e.MarginBounds.Width / nTotalWidth)), Int16)nHeight e.Graphics.MeasureString(oColumn.HeaderText, oColumn.InheritedStyle.Font, nWidth).Height + 11
oColumnLefts.Add(nLeft)
oColumnWidths.Add(nWidth)
oColumnTypes.Add(oColumn.GetType)
nLeft += nWidth
Next
End
If
Do
While nRowPos < DataGridView1.Rows.Count - 1
Dim oRow
As DataGridViewRow = DataGridView1.Rows(nRowPos)
If nTop + nHeight >= e.MarginBounds.Height + e.MarginBounds.Top
ThenDrawFooter(e, nRowsPerPage)
NewPage =
TruenPageNo += 1
e.HasMorePages =
True
Exit
Sub
Else
If NewPage
Then
' Draw Header
'e.Graphics.DrawString(Header, New Font(DataGridView1.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top - e.Graphics.MeasureString(Header, New Font(DataGridView1.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13)
'Draw(Columns)nTop = e.MarginBounds.Top
i = 0
For
Each oColumn
As DataGridViewColumn
In DataGridView1.Columnse.Graphics.FillRectangle(
New SolidBrush(Drawing.Color.LightGray),
New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))e.Graphics.DrawRectangle(Pens.Black,
New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))e.Graphics.DrawString(oColumn.HeaderText, oColumn.InheritedStyle.Font,
New SolidBrush(oColumn.InheritedStyle.ForeColor),
New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)i += 1
NextNewPage =
False
End
IfnTop += nHeight
i = 0
For
Each oCell
As DataGridViewCell
In oRow.Cells
If oColumnTypes(i)
Is
GetType(DataGridViewTextBoxColumn)
OrElse oColumnTypes(i)
Is
GetType(DataGridViewLinkColumn)
Thene.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font,
New SolidBrush(oCell.InheritedStyle.ForeColor),
New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)
ElseIf oColumnTypes(i)
Is
GetType(DataGridViewButtonColumn)
ThenoButton.Text = oCell.Value.ToString
oButton.Size =
New Size(oColumnWidths(i), nHeight)
Dim oBitmap
As
New Bitmap(oButton.Width, oButton.Height)oButton.DrawToBitmap(oBitmap,
New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))e.Graphics.DrawImage(oBitmap,
New Point(oColumnLefts(i), nTop))
ElseIf oColumnTypes(i)
Is
GetType(DataGridViewCheckBoxColumn) ThenoCheckbox.Size New Size(14, 14)oCheckbox.Checked
CType(oCell.Value,
Boolean)
Dim oBitmap
As
New Bitmap(oColumnWidths(i), nHeight)
Dim oTempGraphics
As Graphics = Graphics.FromImage(oBitmap)oTempGraphics.FillRectangle(Brushes.White,
New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))oCheckbox.DrawToBitmap(oBitmap,
New Rectangle(
CType((oBitmap.Width - oCheckbox.Width) / 2, Int32),
CType((oBitmap.Height - oCheckbox.Height) / 2, Int32), oCheckbox.Width, oCheckbox.Height))e.Graphics.DrawImage(oBitmap,
New Point(oColumnLefts(i), nTop))
ElseIf oColumnTypes(i)
Is
GetType(DataGridViewComboBoxColumn)
ThenoComboBox.Size =
New Size(oColumnWidths(i), nHeight)
Dim oBitmap
As
New Bitmap(oComboBox.Width, oComboBox.Height)oComboBox.DrawToBitmap(oBitmap,
New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))e.Graphics.DrawImage(oBitmap,
New Point(oColumnLefts(i), nTop))e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font,
New SolidBrush(oCell.InheritedStyle.ForeColor),
New RectangleF(oColumnLefts(i) + 1, nTop, oColumnWidths(i) - 16, nHeight), oStringFormatComboBox)
ElseIf oColumnTypes(i)
Is
GetType(DataGridViewImageColumn)
Then
Dim oCellSize
As Rectangle =
New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight)
Dim oImageSize
As Size =
CType(oCell.Value, Image).Sizee.Graphics.DrawImage(oCell.Value,
New Rectangle(oColumnLefts(i) +
CType(((oCellSize.Width - oImageSize.Width) / 2), Int32), nTop +
CType(((oCellSize.Height - oImageSize.Height) / 2), Int32),
CType(oCell.Value, Image).Width,
CType(oCell.Value, Image).Height))
End
Ife.Graphics.DrawRectangle(Pens.Black,
New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))i += 1
Next
End
IfnRowPos += 1
nRowsPerPage += 1
LoopDrawFooter(e, nRowsPerPage)
e.HasMorePages =
False
End
Sub
Private
Sub DrawFooter(
ByVal e
As System.Drawing.Printing.PrintPageEventArgs,
ByVal RowsPerPage
As Int32)
Dim sPageNo
As
String = nPageNo.ToString +
" of " + Math.Ceiling(DataGridView1.Rows.Count / RowsPerPage).ToString
' Right Align - User Namee.Graphics.DrawString(sUserName, DataGridView1.Font, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(sPageNo, DataGridView1.Font, e.MarginBounds.Width).Width), e.MarginBounds.Top + e.MarginBounds.Height + 7)
' Left Align - Date/Timee.Graphics.DrawString(Now.ToLongDateString +
" " + Now.ToShortTimeString, DataGridView1.Font, Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top + e.MarginBounds.Height + 7)
' Center - Page No. Infoe.Graphics.DrawString(sPageNo, DataGridView1.Font, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(sPageNo, DataGridView1.Font, e.MarginBounds.Width).Width) / 2, e.MarginBounds.Top + e.MarginBounds.Height + 31)