Error de Index Al Tratar de Imprimir ListView
Estimados tengo el siguiente problema tengo un proyecto en el cual hice un boton en donde imprime perfectamente un Listview, pero cuando hago un Preview del mismo ListView, tengo la siguiente imagen. Trato de Imprimir desde alli y no puedo. En el código mas abajo podrán ver donde me arroja el error.
El Error: El indice estba fuera del Intervalo. Debe ser un valor no negativo e inferior al tamaño de la coleccion
Nombre del parametro: index
Código:
Default Public ReadOnly Property Item(ByVal index As Integer) As IPrintUtilListView
Get
If index > MyBase.InnerList.Count Then
Throw New ArgumentOutOfRangeException("El índice debe estar entre 0 y " & (MyBase.InnerList.Count - 1).ToString)
End If
Return DirectCast(MyBase.InnerList(index), IPrintUtilListView) <--- AKA ME ARROJA EL ERROR
End Get
End Property
Código:
Private Sub btnImprimir_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnImprimir.Click
' Imprimir
imprimir(False)
End Sub
Código:
Private Sub imprimir(ByVal esPreview As Boolean)
' imprimir o mostrar el PrintPreview
'
If prtSettings Is Nothing Then
prtSettings = New PrinterSettings
End If
'
If chkSelAntes.Checked Then
If seleccionarImpresora() = False Then Return
End If
'
If prtDoc Is Nothing Then
prtDoc = New PrintDocument
AddHandler prtDoc.PrintPage, AddressOf prt_PrintPage
End If
'
' resetear la línea actual
lineaActual = 0
'
' la configuración a usar en la impresión
prtDoc.PrinterSettings = prtSettings
'
If esPreview Then
Dim prtPrev As New PrintPreviewDialog
prtPrev.Document = prtDoc
prtPrev.Text = "Previsualizar datos de " & Título
prtPrev.ShowDialog()
Else
prtDoc.Print()
End If
End Sub
Código:
' El evento usado mientras se imprime el documento
Private Sub prt_PrintPage(ByVal sender As Object, _
ByVal e As PrintPageEventArgs)
' Este evento se produce cada vez que se va a imprimir una página
Dim lineHeight As Single
Dim yPos As Single = e.MarginBounds.Top
Dim leftMargin As Single = e.MarginBounds.Left
Dim printFont As System.Drawing.Font
' Asignar el tipo de letra
printFont = prtFont
lineHeight = printFont.GetHeight(e.Graphics)
Dim fontTitulo As New Font("Arial", 20, FontStyle.Bold)
e.Graphics.DrawString("Listado de " & Título, fontTitulo, _
Brushes.Black, leftMargin, yPos)
yPos += fontTitulo.GetHeight(e.Graphics)
' imprimir la cabecera de la página
yPos = Datos(0).CabeceraImpresión(e, printFont, yPos)
' imprimir cada una de las líneas de esta página
Do
yPos += lineHeight
e.Graphics.DrawString(Datos(lineaActual).LineaImpresión, _
printFont, Brushes.Black, leftMargin, yPos)
lineaActual += 1
Loop Until yPos >= e.MarginBounds.Bottom _
OrElse lineaActual >= Datos.Count
If lineaActual < Datos.Count Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub