Hi das ist mir viel wichtiger, Gridview mit "Image Spalte" drucken
habe den Code nach 2600 Seiten erstellen abgebrochen, und verstehe nicht warum er >2600 Seiten erstellt
Spoiler anzeigen
habe den Code nach 2600 Seiten erstellen abgebrochen, und verstehe nicht warum er >2600 Seiten erstellt
Quellcode
- Private Sub Export_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles export_Button.Click
- Dim PrintDlg As PrintDialog = New PrintDialog()
- Dim PrintDlgRslt As DialogResult = New DialogResult()
- Dim MyDoc As PrintDocument = New PrintDocument()
- '
- PrintPreviewDialog1.PrintPreviewControl.Zoom = 1
- PrintPreviewDialog1.Document = PrintDocument1
- PrintPreviewDialog1.Show()
- End Sub
- ':::
- Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
- Dim oStringFormat As StringFormat
- Dim TotalWidth As Integer
- Dim nRowPos As Integer = 0
- Dim NewPage As Boolean = True
- Dim PageNo As Integer = 1
- Dim Header As String = "Consolidated Report"
- 'Dim sUserName As String = WHOLOGGEDIN
- Dim oColumnLefts As New ArrayList
- Dim oColumnWidths As New ArrayList
- Dim oColumnTypes As New ArrayList
- Dim Height As Integer
- Dim Width As Integer
- Dim i As Integer
- Dim RowsPerPage As Integer
- Dim Top As Integer = e.MarginBounds.Top
- Dim Left As Integer = e.MarginBounds.Left
- TotalWidth = 0
- For Each DColumn As DataGridViewColumn In DataGridView1.Columns
- TotalWidth += DColumn.Width
- Next
- If PageNo = 1 Then
- For Each DColumn As DataGridViewColumn In DataGridView1.Columns
- Width = CType(Math.Floor(DColumn.Width / TotalWidth * TotalWidth * (e.MarginBounds.Width / TotalWidth)), Int16)
- Height = e.Graphics.MeasureString(DColumn.HeaderText, DColumn.InheritedStyle.Font, Width).Height + 15
- oColumnLefts.Add(Left)
- oColumnWidths.Add(Width)
- oColumnTypes.Add(DColumn.GetType)
- Left += Width
- Next
- End If
- Do While nRowPos < DataGridView1.Rows.Count
- Dim oRow As DataGridViewRow = DataGridView1.Rows(nRowPos)
- If Top + Height >= e.MarginBounds.Height + e.MarginBounds.Top Then
- 'DrawFooter(e, RowsPerPage)
- NewPage = True
- PageNo += 1
- e.HasMorePages = True
- Exit Sub
- Else
- If NewPage Then
- Top = e.MarginBounds.Top
- i = 0
- For Each oColumn As DataGridViewColumn In DataGridView1.Columns
- e.Graphics.FillRectangle(New SolidBrush(Drawing.Color.LightGray), New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
- e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
- e.Graphics.DrawString(oColumn.HeaderText, oColumn.InheritedStyle.Font, New SolidBrush(oColumn.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
- i += 1
- Next
- NewPage = False
- End If
- Top += Height
- i = 0
- For Each oCell As DataGridViewCell In oRow.Cells
- If oColumnTypes(i) Is GetType(DataGridViewTextBoxColumn) Then
- e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
- ElseIf oColumnTypes(i) Is GetType(DataGridViewImageColumn) Then
- Dim oCellSize As Rectangle = New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height)
- Dim oImageSize As Size = CType(oCell.Value, Image).Size
- e.Graphics.DrawImage(oCell.Value, New Rectangle(oColumnLefts(i) + CType(((oCellSize.Width - oImageSize.Width) / 2), Int32), Top + CType(((oCellSize.Height - oImageSize.Height) / 2), Int32), CType(oCell.Value, Image).Width, CType(oCell.Value, Image).Height))
- End If
- e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
- i += 1
- Next
- End If
- nRowPos += 1
- RowsPerPage += 1
- Loop
- 'Footer(e, RowsPerPage)
- e.HasMorePages = False
- End Sub