Dag programmeurs,
Ik heb op het internet code gevonden om een DataGridView af te drukken en deze code werkt wel perfect maar het nadeel voor mij is dat alle data links uitgelijnd staat. (Headers en Cells)
In de proporties van mijn DataGridView staat alles goed ingesteld en op het scherm wordt alles ook weergegeven zoals ik het wens. De uitlijning van de diverse kolommen moet als volgt zijn:
Kolom 1, Centreren
Kolom 2, Links uitlijnen
Kolom 3, Rechts uitlijnen
Kolom 4, Centreren
Kolom 5, Rechts uitlijnen
Kolom 6, Rechts uitlijnen
Bij het printen staat alles dus echter Links uitgelijnd.
Ik begrijp zelf veel te weinig van de printcode om deze te kunnen aanpassen
Ik heb op het internet code gevonden om een DataGridView af te drukken en deze code werkt wel perfect maar het nadeel voor mij is dat alle data links uitgelijnd staat. (Headers en Cells)
In de proporties van mijn DataGridView staat alles goed ingesteld en op het scherm wordt alles ook weergegeven zoals ik het wens. De uitlijning van de diverse kolommen moet als volgt zijn:
Kolom 1, Centreren
Kolom 2, Links uitlijnen
Kolom 3, Rechts uitlijnen
Kolom 4, Centreren
Kolom 5, Rechts uitlijnen
Kolom 6, Rechts uitlijnen
Bij het printen staat alles dus echter Links uitgelijnd.
Ik begrijp zelf veel te weinig van de printcode om deze te kunnen aanpassen

Code:
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) _
Handles PrintDocument1.PrintPage
'
'DataGridView1 afdrukken:
'
oStringFormat = New StringFormat
oStringFormat.Alignment = StringAlignment.Near
oStringFormat.LineAlignment = StringAlignment.Center
oStringFormat.Trimming = StringTrimming.EllipsisCharacter
nTotalWidth = 0
For Each oColumn As DataGridViewColumn In DataGridView3.Columns
If oColumn.Visible = True Then
nTotalWidth += oColumn.Width
End If
Next
nPageNo = 1
NewPage = True
nRowPos = 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 = 200 'Startpositie vanaf boven (nTop)
Dim nLeft As Int16 = 70 'Startpositie vanaf links (nLeft)
If nPageNo = 1 Then
For Each oColumn As DataGridViewColumn In DataGridView3.Columns
If oColumn.Visible = True Then
nWidth = CType(Math.Floor(oColumn.Width / nTotalWidth * nTotalWidth * _
(e.MarginBounds.Width / nTotalWidth)), Int16)
'Op het einde van onderstaande regel code staat "+ 8"
'Dit heeft invloed op de hoogte van de Rijen en kan aangepast worden !
nHeight = e.Graphics.MeasureString(oColumn.HeaderText, oColumn.InheritedStyle.Font, nWidth).Height + 8
oColumnLefts.Add(nLeft)
oColumnWidths.Add(nWidth)
oColumnTypes.Add(oColumn.GetType)
nLeft += nWidth
End If
Next
End If
Do While nRowPos < DataGridView3.Rows.Count '- 1
Dim oRow As DataGridViewRow = DataGridView3.Rows(nRowPos)
If nTop + nHeight >= e.MarginBounds.Height + e.MarginBounds.Top Then
NewPage = True
nPageNo += 1
e.HasMorePages = False 'True ** Gewijzigd !
Exit Sub
Else
If NewPage Then
'Draw Columns
nTop = 200
i = 0
For Each oColumn As DataGridViewColumn In DataGridView3.Columns
If oColumn.Visible = True Then
e.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
End If
Next
NewPage = False
End If
nTop += nHeight
i = 0
'Draw Rows
For Each oCell As DataGridViewCell In oRow.Cells
If oCell.Visible = True Then
e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, _
New SolidBrush(oCell.InheritedStyle.ForeColor), _
New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)
e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))
i += 1
End If
Next
End If
nRowPos += 1
nRowsPerPage += 1
Loop
e.HasMorePages = False
End Sub
Laatst bewerkt door een moderator: